【问题标题】:Why a simple c program links to libc.a, not libc.so?为什么一个简单的 c 程序链接到 libc.a,而不是 libc.so?
【发布时间】:2017-01-12 15:35:32
【问题描述】:

我的问题是,是否总是需要 libc.a,即使我希望与 libc.so 链接。 我搜索了互联网,它给出了 3 个可能的答案(冲突)

1. c program will require to link to libc.a and crt1.o files
2. for "-l" option, ".so" is preferred against ".a"
3. There're both libc.a and libc.so

那么我的问题的正确答案应该是什么?

【问题讨论】:

  • 静态链接当然需要静态库。
  • 这三个答案你是从哪里得到的?
  • 如果你只动态链接,什么代码会做动态链接?

标签: c linux linker static-libraries


【解决方案1】:

如果你想链接 libc.so 而不是 libc.a,你不需要做任何特别的事情,这是默认的。

第一个答案已经过时,不适用于大多数普通的 Linux 发行版。默认情况下,C 程序需要 libc.so,但不需要 libc.a。

第二个答案默认是正确的。您需要提供像 -static 这样的链接器标志来更改此首选项。请注意,此答案适用于所有库,而不仅仅是 libc。

第三个答案在大多数 Linux 发行版中都是正确的。

对于 GNU libc(随大多数 Linux 发行版提供),不建议将您的可执行文件与 libc.a 静态链接,并且可能不起作用。这是可行的,但您需要确切地知道自己在做什么并跳过一些障碍,否则您的可执行文件仍将依赖于 libc.so。

其他版本的 libc 可能对静态链接更友好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-23
    • 2017-11-06
    • 2012-01-05
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    相关资源
    最近更新 更多