为什么找不到库,即使它们显然位于-L路径上?

时间:2017-08-20 13:08:44

标签: c++ c gcc linker

我有以下链接命令(抱歉它的长度,但我试图将其保留为原始版本,除了缩短某些路径):

  

CC
  CMakeFiles / main.dir / main.cpp.o -o main -L / me / libs / cgal / lib   -L /我/库/ TBB / TBB-2017_U7 /编译/ 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

它似乎检查了一些文件,然后最终找到了它正在寻找的文件。

0 个答案:

没有答案