linux - PNaCl & gtest—pnacl-ld : Incompatible object file (X8664 ! = X8632)

标签 linux ubuntu googletest google-nativeclient ninja

我是这方面的新手,请帮助我...T_T...

最近我在 build pthreadpool (NNPACK 要求)在我的 Ubuntu 14.04 64 位上使用 ninja。 它需要 Google PNaCl(Portable Native Client) Google Test,我都安装了。

在 pthreadpool 根目录中运行 python ./configure.py 之后, 它生成了一个文件build.ninja:

pnacl_toolchain_dir = $nacl_sdk_dir/toolchain/linux_pnacl
pnacl_cc = $pnacl_toolchain_dir/bin/pnacl-clang
pnacl_cxx = $pnacl_toolchain_dir/bin/pnacl-clang++
pnacl_ar = $pnacl_toolchain_dir/bin/pnacl-ar
pnacl_finalize = $pnacl_toolchain_dir/bin/pnacl-finalize
pnacl_translate = $pnacl_toolchain_dir/bin/pnacl-translate
pnacl_sel_ldr = $nacl_sdk_dir/tools/sel_ldr.py
cflags = -std=gnu11
cxxflags = -std=gnu++11
optflags = -O3
rule cc
  command = $pnacl_cc -o $out -c $in -MMD -MF $out.d $optflags $cflags $
      $includes
  description = CC[PNaCl] $descpath
  depfile = $out.d
  deps = gcc
rule cxx
  command = $pnacl_cxx -o $out -c $in -MMD -MF $out.d $optflags $cxxflags $
      $includes
  description = CXX[PNaCl] $descpath
  depfile = $out.d
  deps = gcc
rule ccld
  command = $pnacl_cc -o $out $in $libs $libdirs $ldflags
  description = CCLD[PNaCl] $descpath
rule cxxld
  command = $pnacl_cxx -o $out $in $libs $libdirs $ldflags
  description = CXXLD[PNaCl] $descpath
rule ar
  command = $pnacl_ar rcs $out $in
  description = AR[PNaCl] $descpath
rule finalize
  command = $pnacl_finalize $finflags -o $out $in
  description = FINALIZE[PNaCl] $descpath
rule translate
  command = $pnacl_translate -arch $arch -o $out $in
  description = TRANSLATE[PNaCl] $descpath
rule run
  command = $pnacl_sel_ldr $in
  description = RUN[PNaCl] $descpath
  pool = console
rule install
  command = install -m $mode $in $out
  description = INSTALL $out
build /home/rokim/NNPACK/third-party/pthreadpool/build/pthreadpool.c.bc: cc $
    /home/rokim/NNPACK/third-party/pthreadpool/src/pthreadpool.c
  descpath = pthreadpool.c
  includes = -I$nacl_sdk_dir/include $
      -I/home/rokim/NNPACK/third-party/pthreadpool/include $
      -I/home/rokim/NNPACK/third-party/pthreadpool/src
build $
    /home/rokim/NNPACK/third-party/pthreadpool/artifacts/libpthreadpool.a: $
    ar /home/rokim/NNPACK/third-party/pthreadpool/build/pthreadpool.c.bc
  descpath = libpthreadpool.a
build $
    /home/rokim/NNPACK/third-party/pthreadpool/build/test/pthreadpool.cc.bc: $
    cxx /home/rokim/NNPACK/third-party/pthreadpool/test/pthreadpool.cc
  descpath = pthreadpool.cc
  includes = -I$nacl_sdk_dir/include $
      -I/home/rokim/NNPACK/third-party/pthreadpool/include $
      -I/home/rokim/NNPACK/third-party/pthreadpool/src
build /home/rokim/NNPACK/third-party/pthreadpool/build/test/pthreadpool.bc: $
    cxxld /home/rokim/NNPACK/third-party/pthreadpool/build/pthreadpool.c.bc $
    /home/rokim/NNPACK/third-party/pthreadpool/build/test/pthreadpool.cc.bc
  libs = -lgtest
  libdirs = -L$nacl_sdk_dir/lib/pnacl/Release
  descpath = pthreadpool.bc
build $
    /home/rokim/NNPACK/third-party/pthreadpool/artifacts/pthreadpool.pexe: $
    finalize $
    /home/rokim/NNPACK/third-party/pthreadpool/build/test/pthreadpool.bc
  descpath = pthreadpool.pexe
build $
    /home/rokim/NNPACK/third-party/pthreadpool/artifacts/pthreadpool.nexe: $
    translate $
    /home/rokim/NNPACK/third-party/pthreadpool/artifacts/pthreadpool.pexe
  arch = x86_64
  descpath = pthreadpool.pexe
build test: run $
    /home/rokim/NNPACK/third-party/pthreadpool/artifacts/pthreadpool.nexe
  descpath = pthreadpool.nexe
default $
    /home/rokim/NNPACK/third-party/pthreadpool/artifacts/libpthreadpool.a $
    /home/rokim/NNPACK/third-party/pthreadpool/artifacts/pthreadpool.nexe
build /usr/local/include/pthreadpool.h: install $
    /home/rokim/NNPACK/third-party/pthreadpool/include/pthreadpool.h
  mode = 0644
build /usr/local/lib/libpthreadpool.a: install $
    /home/rokim/NNPACK/third-party/pthreadpool/build/pthreadpool.c.bc
  mode = 0644
build install: phony /usr/local/include/pthreadpool.h $
    /usr/local/lib/libpthreadpool.a

但是当我运行命令ninja时,出现了错误:

[4/6] CXXLD[PNaCl] pthreadpool.bc
FAILED: /home/rokim/NNPACK/third-party/pthreadpool/build/test/pthreadpool.bc 
/toolchain/linux_pnacl/bin/pnacl-clang++ -o /home/rokim/NNPACK/third-party/pthreadpool/build/test/pthreadpool.bc /home/rokim/NNPACK/third-party/pthreadpool/build/pthreadpool.c.bc /home/rokim/NNPACK/third-party/pthreadpool/build/test/pthreadpool.cc.bc -lgtest -L/lib/pnacl/Release 
pnacl-ld: Cannot find '-lgtest'
ninja: build stopped: subcommand failed.

我认为可能是路径问题,所以我将libgtest.alibgtest_main.a (Generated from Google Test)放在/usr/lib/gtest中,修改了build.ninja:

libs = -L/usr/lib/gtest -lgtest_main -lgtest

似乎 ninja 找到了 lib 文件,但是出现了错误:

[1/3] CXXLD[PNaCl] pthreadpool.bc
FAILED: /home/rokim/NNPACK/third-party/pthreadpool/build/test/pthreadpool.bc 
/toolchain/linux_pnacl/bin/pnacl-clang++ -o /home/rokim/NNPACK/third-party/pthreadpool/build/test/pthreadpool.bc /home/rokim/NNPACK/third-party/pthreadpool/build/pthreadpool.c.bc /home/rokim/NNPACK/third-party/pthreadpool/build/test/pthreadpool.cc.bc -L/usr/lib/gtest -lgtest_main -lgtest -L/lib/pnacl/Release 
pnacl-ld: /usr/lib/gtest/libgtest_main.a: Incompatible object file (X8664 != X8632)
ninja: build stopped: subcommand failed.

我相信 lib 文件是好的,因为我尝试使用 g++ 来编译一个 test.cpp:

g++ test.cpp -lgtest_main -lgtest -lpthread

它奏效了。

所以我认为 pnacl 或我使用它的方式可能有问题。我在 google 上搜索了关于 pnacl 和 gtest 的 32 位 64 位不兼容问题,但我一无所获。现在我完全不知道该怎么做,因为我是这方面的新手......

所以,如果有任何帮助、想法或建议,我们将不胜感激!

对于 Google PNaCl,我下载了 nacl_sdk.zip 并将其解压缩到/home/rokim/nacl_sdk,我得到了最新的 sdk_toolspepper_49

对于 Google 测试,我运行 sudo apt-get install libgtest-dev 。在 cmakemake 之后,我得到了 libgtest.alibgtest_main.a 然后我把它们放到/usr/lib和/usr/local/lib。gtest 包含文件放在/usr/include 和 usr/local/include 中。

最佳答案

您不能将来自主机系统的 libgtest 与 NaCl 编译器一起使用。您链接的所有内容都必须使用相同的 (NaCl) 编译器构建。因此,您想使用 pnacl-clang 构建 libgtest,并将其与您的其他 PNaCl 构建链接。

关于linux - PNaCl & gtest—pnacl-ld : Incompatible object file (X8664 ! = X8632),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40839331/

相关文章:

linux - Git 不会添加文件 - 'Permission denied'

linux - 使用 grep 和 awk 将文件的第一列转换为 unixtime

linux - 如何为 32 位嵌入式软件重新配置 Google Test?

c++ - 如果 Google 测试中的测试失败,如何打印一些东西?

html - 将 Google 测试 XML 报告转换为 HTML(控制台)

php - 无法在 Xdebug 客户端和服务器之间建立连接

linux - Linux 中如何判断文件类型?

linux - Capistrano 部署的心理错误

ubuntu - 用 buildozer 编译后如何删除无用的文件?

php - 为什么别人看不到我的wordpress网站