我想知道IDE /编译器/链接器是否有一个方法来从头文件名中识别共享对象文件名(lib * .so)。
我使用eclipse CDT,我包括stdio和其他人一样,但对于一些奇怪的库,我必须告诉IDE库的名称和路径。为:
#include "opencv2/core/core.hpp"
我必须告诉链接器使用库opencv_core(IDE为链接器生成一个-lopencv_core参数,因此它查找libopencv_core.so)。
如何从库名中获取库文件名非常清楚。我不知道如何从头文件中获取它。
我无法在stackoverflow中找到这个问题的答案,所以我怀疑标题和库文件名之间没有关系。
非常感谢。
答案 0 :(得分:1)
你的怀疑是正确的。鉴于某些头文件位于某处,在该头文件中没有任何不可见或隐藏的东西告诉编译器“嘿,我的库就在那边!”。至少在C ++标准中没有任何内容。各个C ++实现可以自由地做任何他们想做的事情,也可能有类似的东西。但就C ++标准而言,答案是:不。
就链接器而言,它取决于每个C ++实现或操作系统。在某些情况下,链接器有一个默认的目录列表,它会搜索要链接的库,并且标准的C ++库就在那里。
在其他情况下,链接器不会直接调用,但会被编译器调用。 g++ -o prg module1.o module2.o
就是这种情况。与gcc的典型链接操作将在
ld
gcc知道它的库在哪里。它调用链接器,通常是#reader(lib "htdp-beginner-reader.ss" "lang")((modname basic) (read-case-sensitive #t) (teachpacks ()) (htdp-settings #(#t constructor repeating-decimal #f #t none #f () #f)))
,并提供C ++标准库的位置,以及链接在一起的模块。