问题 - 无法使用 libtomcrypt
构建 .nexe ( -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
生成文件
下载的 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 2014 年 7 月 15 日星期二 03:51:08 UTC 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++ 专业人士,但我在那里慢慢挖掘,所以最好在这个主题上为我和新手提供指导 :D
最佳答案
这实际上是一个不同的问题。 (我在发布问题后立即理解了它。.现在才能够对其进行测试)。
实际上我能够制作 64 位 .nexe。问题出在 32 位 .nexe 上。我无法编译它们失败了。给出错误消息“skipping incompatible”,我试图找到 32 位文件,但它是 64 位的。 当我明白我发现了类似的 issue and solution hint .
返回 naclports 并删除已安装的库。
$ cd naclports/src
$ ./make_all.sh clean
编辑 make_all.sh
以使用 -m32
标志编译 naclports 库
首先安装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
成功!
关于linux - 构建 Google Chrome NaCl 应用程序 .nexe 文件时找不到有效的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25240358/