为什么找不到库,即使它们显然位于-L路径上?
我有以下链接命令(抱歉它的长度,但我试图尽可能保留原始,除了缩短一些路径):
CC
CMakeFiles / main.dir / main.cpp.o -o main -L / me / libs / cgal / lib -L / me / libs / tbb / tbb-2017_U7 / build / linux_intel64_gcc_cc5.3.0_libc2.19_kernel3.12.61_release -rdynamic -lmpfr -lgmp /me/libs/cgal/lib/libCGAL_ImageIO.a /me/libs/cgal/lib/libCGAL.a -lboost_thread -lboost_system -lz /me/libs/cgal/lib/libCGAL_ImageIO.a / me / libs /cgal/lib/libCGAL.a -lboost_thread -lboost_system -lz -ltbb -ltbbmalloc -Wl,-rpath,/ me / libs / cgal / lib:/me/libs/tbb/tbb-2017_U7/build/linux_intel64_gcc_cc5.3.0_libc2 .19_kernel3.12.61_release
它会告诉我:
/ usr / bin / ld:找不到-ltbb
/ usr / bin / ld:找不到-ltbbmalloc
最可能与问题相关的是我有-L/me/libs/tbb/tbb-2017_U7/build/linux_intel64_gcc_cc5.3.0_libc2.19_kernel3.12.61_release
和-ltbb - ltbbmalloc
。 在该-L
目录中,有一个libtbb.so
和一个libtbbmalloc.so
。
但是为什么链接器找不到那些库,即使它们显然存在于-L
给出的目录中?
EDIT1:我被要求用file
命令检查。 我得到以下答案:
- * .o文件是
ELF 64-bit LSB relocatable, x86-64, version 1 (GNU/Linux), not stripped
- libtbb.so.2是
ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped
似乎不完全相同,但我不知道它是否兼容。 基本上,我用相同的编译器编译它。 但我不确定TBB的构建系统是否可能潜入其他一些选项。
EDIT2 :我还被要求使用strace
。 一段简短的摘录显示:
open("/me/libs/tbb/tbb-2017_U7/build/linux_intel64_CC_cc5.3.0_libc2.19_kernel3.12.61_release/libtbb.so", O_RDONLY) = 12 [pid 102330] open("/me/libs/tbb/tbb-2017_U7/build/linux_intel64_CC_cc5.3.0_libc2.19_kernel3.12.61_release/libtbb.so", O_RDONLY) = 11 [pid 102330] open("libtbb.so.2", O_RDONLY) = -1 ENOENT (No such file or directory) [pid 102330] open("/me/libs/cgal/lib/libtbb.so.2", O_RDONLY) = -1 ENOENT (No such file or directory) [pid 102330] open("/me/libs/tbb/tbb-2017_U7/build/linux_intel64_CC_cc5.3.0_libc2.19_kernel3.12.61_release/libtbb.so.2", O_RDONLY) = 11
它似乎检查了一些文件,然后最终找到了它正在寻找的文件。