Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么找不到库,即使它们显然在-L路径上?_C++_C_Gcc_Linker - Fatal编程技术网

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

C++ 为什么找不到库,即使它们显然在-L路径上?,c++,c,gcc,linker,C++,C,Gcc,Linker,我有以下链接命令(很抱歉,它太长了,但我尝试尽可能地保留它,只是缩短了一些路径): 抄送 cmakfiles/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_发行版 -rdynamic-lmpfr-lgmp/me/libs/cgal/lib/libCGAL_ImageIO.a/me/libs

我有以下链接命令(很抱歉,它太长了,但我尝试尽可能地保留它,只是缩短了一些路径):

抄送
cmakfiles/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_发行版 -rdynamic-lmpfr-lgmp/me/libs/cgal/lib/libCGAL_ImageIO.a/me/libs/cgal/lib/libCGAL.a-lboost_线程-lboost_系统 -lz/me/libs/cgal/lib/libCGAL_ImageIO.a/me/libs/cgal/libCGAL.a-lboost_thread-lboost_system-lz-ltbb-ltbbmalloc-Wl,-rpath,/me/libs/cgal/lib:/me/libs/tbb/tbb-2017\u U7/build/linux\u intel64\u gcc\u cc5.3.0\u libc2.19\u kernel3.12.61\u发行版

它会告诉我:

/usr/bin/ld:找不到-ltbb

/usr/bin/ld:找不到-ltbbmalloc

最可能与这个问题相关的是我有
-L/me/libs/tbb/tbb-2017\u U7/build/linux\u intel64\u gcc\u cc5.3.0\u libc2.19\u kernel3.12.61\u release
-ltbb-ltbbmalloc
。在
-L
目录中,有一个
libtbb.so
和一个
libtbbmalloc.so

但是为什么链接器找不到这些库,即使它们显然存在于
-L
给定的目录中?

EDIT1:我被要求使用
文件
命令进行检查。我得到以下答案:

  • *.o文件是ELF 64位LSB可重定位的x86-64版本1(GNU/Linux),未剥离
  • libtbb.so.2是ELF 64位LSB共享对象,x86-64,版本1(SYSV),动态链接,而不是剥离
  • 看起来不完全一样,但我不知道它是否兼容。基本上,我是用同一个编译器编译的。但我不确定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
    

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

    也许它们是针对错误的体系结构。使用
    file
    命令检查。尝试将--verbose传递给链接器,查看它试图打开哪些文件。如果失败,请尝试编译命令的
    strace-e open-f
    。我仍然怀疑ELF格式是否不兼容…?这里出了问题。如果链接器试图打开一个文件,它应该以详细模式报告它。如果它不报告任何内容,则不会尝试打开它。但是斯特拉斯说它已经开放了。也许它是开着的,但不是由劳工处开着的?你可以看看谁用strace-f-e打开了什么,execve。还可以查看CC在to级别传递给ld.Just-v的参数。斯特拉斯也会给他们看。