【问题标题】:How to handle lib dependency while compiling?编译时如何处理lib依赖?
【发布时间】: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


【解决方案1】:

是的,所有需要的静态库都必须在命令行中列出。这些只是提供.o 文件的特殊存档文件。就像您不能省略必需的 .o 文件一样,您也不能省略必需的档案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多