c - 我需要为编译器指定一个间接使用的库吗?

标签 c gcc

如果 C 程序使用库 A(.a.so),并且库 A > 使用另一个库B(.a.so),当我编译C程序时,是否必须指定路径库B的头文件和库文件到诸如gcc之类的编译器?

谢谢。

最佳答案

do I have to specify the path to the header

这取决于库 A 的头文件 (#include) 是否包含包含库 B 的头文件的 #include 行。

大多数库的开发人员都试图避免这种情况,因此如果您没有库 B 的头文件,您甚至可以使用库 A!

(这当然意味着您不必指定头文件的路径。)

and the library file of library B to a compiler such as gcc?

  • 如果库 A 是静态库 (.a),则必须指定库 B:

    库 B 是静态 (.a) 还是共享 (.so) 并不重要。但是,如果库 B 是静态的 (.a) 并使用库 C,您还必须指定库 C。如果库 C 使用库 D...

  • 如果库 A 是共享库 (.so),则取决于所使用的操作系统:

    • 使用非常非常古老的 Linux 变体(1990 年代末),您必须指定库 B(和库 C ...)。

    • 也许仍然有操作系统具有这种行为。

    • 在最新的 Linux 变体中,如果库 A 是共享库,则不必指定库 B。对于(所有版本?)Windows 也是如此。

关于c - 我需要为编译器指定一个间接使用的库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46995641/

相关文章:

c - 链表问题 - 循环迭代错误的节点

c - 完整后跟子对象未定义行为的部分初始化?

c - 我的第一个 C 编译器是用 gcc 编译的。我使用哪个文件?

c - 使用 make 定义内联变量

c++ - 我可以将 Unresolved 引用链接到中止吗?

c++ - 在不修改 .h 文件的情况下处理宏重新定义 ... C/C++ 语言

c - Openssl如何找出X509证书中公钥的位大小是多少

c++ - Linux 上的 x86 C++ 开发存在哪些(有效的)备用工具链?

c++ - std::string 复制构造函数在 GCC 4.1.2 中不是很深?

c - 对多线程 TCP 客户端执行 'close ()' 时未发送 TCP FIN