我想知道IDE /编译器/链接器是否有一种方法可以从头文件名中识别共享库文件名(lib * .so)。
我使用eclipse CDT,包括stdio和其他所有人,但是对于一些奇怪的库,我必须告诉IDE库的名称和路径。对于:
#include "opencv2/core/core.hpp"
我必须告诉链接器使用库opencv_core(IDE为链接器生成-lopencv_core参数,因此它会查找libopencv_core.so)。
很清楚如何从库名中获取库文件名。我不确定如何从头文件中获取它。
我在stackoverflow或其他任何地方都找不到此问题的答案,因此我怀疑标头和库文件名之间没有关系。
非常感谢你。
最佳答案
您的怀疑是正确的。给定某个头文件位于某处,该头文件中没有任何不可见或隐藏的内容,告诉编译器“嘿,我的库在那儿!”。在C ++标准中至少没有。各个C ++实现都可以自由地做他们想做的事,并且可能会有类似的事情。但是就C ++标准而言,答案是:不会。
就您的链接器而言,它取决于每个C ++实现或操作系统。在某些情况下,链接器会在默认目录列表中搜索要链接的库,而标准的C ++库就位于其中。
在其他情况下,链接器不会直接被调用,而是由编译器调用。 gcc
就是这种情况。用gcc进行的典型链接操作可能在
g++ -o prg module1.o module2.o
gcc知道其库在哪里。除了链接在一起的模块之外,它还会调用链接器(通常为
ld
)并提供C ++标准库的位置。关于c++ - IDE如何从头文件.h中找到共享库名.so,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39058282/