Не удается найти действительную библиотеку при создании файла приложения.nexe для Google Chrome NaCl.
Проблема - Невозможно собрать.nexe с libtomcrypt
(-ltomcrypt
) на 64 битной машине
"пропуск несовместим" или "не найден".
/home/ME/nacl/pepper_35/toolchain/linux_x86_newlib/bin/../lib/gcc/x86_64-nacl/4.4.3/../../../../x86_64-nacl/bin/ld: skipping incompatible /home/ME/nacl/pepper_35/toolchain/linux_x86_newlib/i686-nacl/usr/lib/libtomcrypt.a when searching for -ltomcrypt
/home/ME/nacl/pepper_35/toolchain/linux_x86_newlib/bin/../lib/gcc/x86_64-nacl/4.4.3/../../../../x86_64-nacl/bin/ld: skipping incompatible /home/ME/nacl/pepper_35/toolchain/linux_x86_newlib/bin/../x86_64-nacl/usr/lib/libtomcrypt.a when searching for -ltomcrypt
/home/ME/nacl/pepper_35/toolchain/linux_x86_newlib/bin/../lib/gcc/x86_64-nacl/4.4.3/../../../../x86_64-nacl/bin/ld: cannot find -ltomcrypt
collect2: ld returned 1 exit status
make: *** [newlib/Release/my_module_unstripped_x86_32.nexe] Error 1
Makefile
Копия существующего примера в скачанном nacl sdk. Модифицировано с tomcrypt
что приводит к -ltomcrypt
флаг.
VALID_TOOLCHAINS := newlib glibc pnacl linux
NACL_SDK_ROOT ?= $(abspath $(CURDIR)/../..)
include $(NACL_SDK_ROOT)/tools/common.mk
TARGET = my_module
LIBS = ppapi_cpp ppapi pthread tomcrypt
CFLAGS = -Wall
SOURCES = my_module.cc
# Build rules generated by macros from common.mk:
$(foreach src,$(SOURCES),$(eval $(call COMPILE_RULE,$(src),$(CFLAGS))))
ifeq ($(CONFIG),Release)
$(eval $(call LINK_RULE,$(TARGET)_unstripped,$(SOURCES),$(LIBS),$(DEPS)))
$(eval $(call STRIP_RULE,$(TARGET),$(TARGET)_unstripped))
else
$(eval $(call LINK_RULE,$(TARGET),$(SOURCES),$(LIBS),$(DEPS)))
endif
$(eval $(call NMF_RULE,$(TARGET),))
Что я имею
- Linux 3.13.0-32-generiC#57-Ubuntu SMP Вт 15 июля 03:51:08 UTC 2014 x86_64 x86_64 x86_64 GNU / Linux
my_module.cc
- код модуля nacl (не более.cc файлов)#include <tomcrypt.h>
Makefile
(выше)~/nacl/pepper_35/
~/nacl/naclports
Я пытался переустановить libtocrypt
с naclports, но без прогресса. Как я поняла tomcrypt
lib построен как 32-битный, но я не знаю, как указать компилятору сделать его 64-битным.
Там нет ошибок, если Makefile без tomcrypt
флаг.
Я не Makefile или C++ pro, но я копаюсь там медленно, поэтому лучше дать инструкции для меня, как для новичков на эти темы:D
1 ответ
На самом деле это была другая проблема. (Я понял, сразу после того, как отправил вопрос.. И только теперь смог проверить это).
На самом деле я смог сделать 64bit.nexe. Проблема была с 32bit .nexe. Не получилось, что я не смог их скомпилировать. Сообщение об ошибке "пропуск несовместимого" было дано, что я пытался найти 32-битный файл, но он был 64-битным. Когда я понимаю, что нашел аналогичную проблему и подсказку решения.
Вернитесь в naclports и удалите установленные библиотеки.
$ cd naclports/src
$ ./make_all.sh clean
редактировать make_all.sh
скомпилировать naclports libs с -m32
флаги
Первая установка g++-multilib
чтобы иметь возможность компилировать 32-битные приложения. У меня есть Ubuntu, так
sudo apt-get install g++-multilib
Затем определите флаговые переменные и переместите # i686 NaCl
раздел до конца (поэтому заданные флаги не нарушают другие 64-битные разделы)
...
export CFLAGS
export CXXFLAGS
export LDFLAGS
...
# i686 NaCl
NACL_ARCH=i686
TOOLCHAIN=glibc
CFLAGS="-m32"
CXXFLAGS="-m32"
LDFLAGS="-m32"
make ${TARGETS}
TOOLCHAIN=newlib
make ${TARGETS}
Сделай свою жизнь снова
./make_all.sh libtomcrypt
Наконец, сделайте свой модуль NaCl
Используя тот же Makefile, который я скопировал в вопросе.
$ cd my_module/
$ make
CXX newlib/Release/my_module_x86_32.o
LINK newlib/Release/my_module_unstripped_x86_32.nexe
VALIDATE newlib/Release/my_module_unstripped_x86_32.nexe
CXX newlib/Release/my_module_x86_64.o
LINK newlib/Release/my_module_unstripped_x86_64.nexe
VALIDATE newlib/Release/my_module_unstripped_x86_64.nexe
CXX newlib/Release/my_module_arm.o
LINK newlib/Release/my_module_unstripped_arm.nexe
VALIDATE newlib/Release/my_module_unstripped_arm.nexe
STRIP newlib/Release/my_module_x86_32.nexe
STRIP newlib/Release/my_module_x86_64.nexe
STRIP newlib/Release/my_module_arm.nexe
CREATE_NMF newlib/Release/my_module.nmf
Успех!