IDE如何从头文件.h中找到共享库名.so ?

How does the IDE to find the shared library name .so from the header file .h

本文关键字:共享 so 文件 IDE      更新时间:2023-10-16

我想知道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++标准库的位置,以及要链接在一起的模块。

相关文章: