我是否需要为编译器指定间接使用的库?

时间:2017-10-28 23:58:09

标签: c gcc

如果C程序使用库A.a.so),则库A使用其他库B({{1}或者.a),当我编译C程序时,是否必须将库.so的头和库文件的路径指定给编译器,例如B

感谢。

1 个答案:

答案 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也是如此。