如果 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/