2016-08-20 65 views
0

我想知道IDE /编译器/链接器是否有一种方法从头文件名中标识共享对象文件名(lib * .so)。IDE如何从头文件中找到共享库名称.h

我使用eclipse CDT,我包括stdio和其他人一样,但对于一些奇怪的库,我必须告诉IDE库名称和路径。适用于:

#include "opencv2/core/core.hpp" 

我必须告诉链接使用的库opencv_core(IDE生成链接一个-lopencv_core参数,所以它看起来libopencv_core.so)。

如何从库名称中获取库文件名是非常清楚的。我不知道如何从头文件中获取它。

我无法在stackoverflow或其他地方找到这个问题的答案,所以我怀疑头文件和库文件名之间没有关系。

非常感谢。

+1

你的怀疑是正确的。考虑到某个头文件在某处,没有任何隐形或隐藏的头文件告诉编译器“嘿,我的库在那边!”。至少在C++标准中没有。单独的C++实现可以自由地做任何他们想做的事情,并且可能有类似的东西。但就C++标准而言,答案是:不。 –

+0

非常感谢你,这是最好的答案。我假设链接器只知道标准C++库在哪里。 –

+0

@SamVarshavchik:将该评论复制到答案中,然后OP可以接受它。 –

回答

1

你的怀疑是正确的。考虑到某个头文件位于某处,在头文件中没有任何隐藏或隐藏的内容告诉编译器“嘿,我的库在那边!”。至少在C++标准中没有。单独的C++实现可以自由地做任何他们想做的事情,并且可能有类似的东西。但就C++标准而言,答案是:不。

就连接器而言,它取决于每个C++实现或操作系统。在某些情况下,链接器会搜索要链接的库的默认目录列表,并且标准C++库将进入该目录。

在其他情况下,链接器不会被直接调用,而会被编译器调用。这将是gcc的情况。一个典型的gcc链接操作可能会沿着某个地方

g++ -o prg module1.o module2.o 

gcc知道它的库在哪里。它调用链接器,通常为ld,并提供C++标准库的位置,以及链接在一起的模块。