如果C程序使用库A
(.a
或.so
),则库A
使用其他库B
({{1}或者.a
),当我编译C程序时,是否必须将库.so
的头和库文件的路径指定给编译器,例如B
?
感谢。
答案 0 :(得分:0)
我是否必须指定标题的路径
这取决于库A的标题(#include
)文件是否包含#include
行,其中包含库B的头文件。
大多数库的开发人员试图避免这种情况,因此如果你没有库B的头文件,你甚至可以使用库A!
(这当然意味着您不必指定头文件的路径。)
和库B的库文件到编译器,如gcc?
如果库A是静态库(.a
),您必须指定库B:
库B是静态的(.a
)还是共享的(.so
)并不重要。但是,如果库B是静态的(.a
)并使用库C,则还必须指定库C.如果库C使用库D ...
如果库A是共享库(.so
),则取决于所使用的操作系统:
使用非常非常旧的Linux变种(20世纪90年代末),你必须指定库B(和库C ......)。
可能仍然存在具有此行为的操作系统。
在最近的Linux变体中,如果库A是共享库,则不必指定库B. (所有版本的?)Windows也是如此。