【发布时间】:2020-01-27 19:17:43
【问题描述】:
假设我有两个静态库:libA 和 libB,而 libB 使用 libA。
对于每个库libX,假设hX 是libX 的标头目录,dX 是libX 的文件目录。
现在当libB 的用户想要使用libB 编译源代码C.c 时会发生什么?他必须知道 libB 使用 libA,所以他必须输入:
gcc -IhB -IhA C.c -lA -LdA -lB -LdB
或者有没有办法让libB自动向gcc“说”使用libA,这样用户就可以输入:
gcc -IhB -IhA C.c -LdA -lB -LdB
?
【问题讨论】:
-
我添加了ar 标签,因为这个问题经常与
ar(静态)库有关。答案取决于您是否拥有libA.a或libA.so(或其他一些共享库后缀),以及您是否拥有libB.a或libB.so。如果任何一个库是静态的 (.a),则答案为“否”。如果它们都是共享的,则答案将变为“也许”。请注意,pkg-config是一个旨在提供帮助的系统。此外,AutoTools(autoconf,尤其是libtool)可能会提供帮助。 -
你应该看看ar标签中的问答——它们并不多,但其中一些是相关的。
-
那么,如果
libB使用 10 个库,而他们自己使用 10 个库,libB的用户必须知道这 100 个库中的每一个? -
除非有重叠(因此只有 90 个不同的库),否则可以。这就是
pkg-config这样的工具派上用场的地方。 -
好的,谢谢您的帮助。
标签: c gcc compilation static-libraries unix-ar