2016-11-28 2 views
0

Je suis un débutant à ce, S'il vous plaît aidez-moi ... T_T ...PNaCl & gtest-PNaCl-ld: fichier objet Incompatible (! X8664 = X8632)

Récemment je construisais pthreadpool (requis par NNPACK) avec ninja sur mon Ubuntu 14.04 64bit. Il nécessite Google PNaCl(Portable Native Client) et Google Test, et j'ai installé les deux.

Après avoir couru python ./configure.py dans répertoire racine de pthreadpool, il a généré un fichier 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

Mais quand je lance la commande ninja, il est venu l'erreur:

[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.

je pensais que ce peut être le problème de chemin, donc je mis libgtest.a et libgtest_main.a (test généré de Google) dans/usr/lib/gtest et a modifié le build.ninja:

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

Il semble ninja trouvé les fichiers lib, mais il est venu l'erreur:

[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.

Je crois que les fichiers lib sont bons puisque j'ai essayé d'utiliser g ++ pour compiler un test.cpp:

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

Et cela a fonctionné.

Alors j'ai pensé qu'il pourrait être quelque chose de mal à propos de pnacl ou la façon dont je l'utilise. J'ai googlé le problème 32bit 64bit incompatible sur pnacl et gtest mais je n'ai rien. Maintenant, je n'ai aucune idée de ce qu'il faut faire depuis que je suis un débutant à ce ...

Alors s'il vous plaît, toute aide, idée ou suggestion serait grandement appriciate!

Pour Google PNaCl, je téléchargé le nacl_sdk.zip et unziped à/home/rokim/nacl_sdk et je me suis sdk_tools et pepper_49 à jour. Pour tester Google, exécutez sudo apt-get install libgtest-dev.Après CMake et faire je suis arrivé libgtest.a et libgtest_main.a alors je les ai mis dans/usr/lib et /usr/local/lib.The gtest fichier include sont mis dans/usr/include et usr/local/include.

Répondre

0

Vous ne pouvez pas utiliser libgtest à partir du système hôte avec les compilateurs NaCl. Tout ce que vous liez doit être construit avec le même compilateur (NaCl). Donc vous voulez construire libgtest avec pnacl-clang, et lier cela avec votre autre construction PNaCl.

+0

Thaaank vous !!! J'ai modifié cmakelist pour compiler gtest avec pnacl-clang et ça marche maintenant! Merci beaucoup veeery !!!^_ ^ – ROKIM