2016-08-08 33 views
0

I Quelldatei auf dem Host-Maschine kompiliert haben:Problem mit dynamischen Bibliotheken

g++ -I./source/utils -m32 ./source/services/library_version_info.cpp -o version_info $DAALROOT/lib/ia32_lin/libdaal_core.so $DAALROOT/lib/ia32_lin/libdaal_thread.so -ltbb -liomp5 -lpthread -ldl 

# echo $DAALROOT 
# /opt/intel/compilers_and_libraries_2016.3.210/linux/daal/ 

Wenn ich versuche, dies zu berufen auf Zielmaschine ich solche Fehler:

./version_info: error while loading shared libraries: /opt/intel/compilers_and_libraries_2016.3.210/linux/daal/lib/ia32_lin/libdaal_core.so: cannot open shared object file: No such file or directory 

# echo $DAALROOT 
# /media/sdcard/daalroot/daal 

$LD_LIBRARY_PATH auf der Zielmaschine enthält den Pfad zu libdaal_core.so, aber das Programm sieht das nicht. Wie kann ich diesen Fehler beheben?

upd. Host g ++: 5.4.0, Ziel: 4.9.1

upd2.

ldd version_info 
    linux-gate.so.1 (0xb77db000) 
    /opt/intel/compilers_and_libraries_2016.3.210/linux/daal/lib/ia32_lin/libdaal_core.so => not found 
    /opt/intel/compilers_and_libraries_2016.3.210/linux/daal/lib/ia32_lin/libdaal_thread.so => not found 
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x4332e000) 
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x43221000) 
    libc.so.6 => /lib/libc.so.6 (0x42e7d000) 
    libm.so.6 => /lib/libm.so.6 (0x43003000) 
    /lib/ld-linux.so.2 (0x42e50000) 

env LD_DEBUG=all ./version_info 
     408: 
     408: file=/opt/intel/compilers_and_libraries_2016.3.210/linux/daal/lib/ia32_lin/libdaal_core.so [0]; needed by ./version_info [0] 
./version_info: error while loading shared libraries: /opt/intel/compilers_and_libraries_2016.3.210/linux/daal/lib/ia32_lin/libdaal_core.so: cannot open shared object file: No such file or directory 

echo $LD_LIBRARY_PATH 
/media/sdcard/daalroot/daal/lib/ia32_lin:/media/sdcard/daalroot/daal/../tbb/lib/ia32_lin/gcc4.4 
+0

sind Sie sicher, dass Ihr Ziel die gleiche Plattform, das heißt ia32, x86_64 nicht –

+0

@ MarcusMüller, ja dann ist es 100%. – 0x1337

+0

hast du 'sudo ldconfig' versucht? –

Antwort

0

Lösung:

g++ -I./source/utils -m32 ./source/services/library_version_info.cpp -o version_info -l daal_core -l daal_thread -ltbb -liomp5 -lpthread -ldl 
+0

Die beste Vorgehensweise besteht darin, '-L/lib/path -lddal_core' zu ​​verwenden, um eine gemeinsam genutzte Bibliothek wie Ihr Update zu verknüpfen. Ich habe mit GCC 4.9.x versucht und festgestellt, dass es den vollständigen Pfad der gemeinsam genutzten Bibliothek in die ausführbare Datei einbetten wird (und Sie können es durch "ldd" überprüfen). Was auch immer Ihr LD_LIBRARY_PATH an einer anderen Stelle oder sogar leer angegeben ist, weiß das OS immer, wie die ehemalige gemeinsam genutzte Bibliothek durch den eingebetteten vollständigen Pfad geladen wird. Das ähnliche Verhalten ist 'g ++ -Wl, - rpath,/lib/Pfad -L/lib/Pfad -lddal_core ...', die den Pfad der Standard-Bibliothek in die ausführbare Datei einbetten. – jclin