为什么一个简单的c程序链接到libc.a,而不是libc.so?

为什么一个简单的c程序链接到libc.a,而不是libc.so?,c,linux,linker,static-libraries,C,Linux,Linker,Static Libraries,我的问题是,libc.a是否总是需要的,即使我希望与libc.so链接。 我在网上搜索,它给出了3个可能的答案(相互矛盾) 那么我的问题的正确答案应该是什么呢?如果你想链接libc.So而不是libc.a,你不需要做任何特殊的事情,这是默认设置 第一个答案已经过时,不适用于大多数普通的Linux发行版。默认情况下,C程序需要libc.so,但不需要libc.A 默认情况下,第二个答案是正确的。您需要提供一个链接器标志,如-static来更改此首选项。注意:这个答案适用于所有库,而不仅仅是libc

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


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

如果你想链接libc.So而不是libc.a,你不需要做任何特殊的事情,这是默认设置

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

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

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

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


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

如果您希望链接libc.so而不是libc.a,则无需执行任何特殊操作,这是默认设置

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

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

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

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


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

静态链接当然需要静态库。这三个答案是从哪里获得的?如果只是动态链接,什么代码会进行动态链接?静态链接当然需要静态库。这三个答案是从哪里获得的?什么如果只进行动态链接,代码会进行动态链接吗?
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