我的问题是,即使我希望链接libc.so,也总是需要libc.a. 我搜索了互联网,它提供了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
那么我的问题的正确答案应该是什么?
答案 0 :(得分:2)
如果你想链接libc.so而不是libc.a,你不需要做任何特别的事情,这是默认的。
第一个答案已过时,不适用于大多数普通Linux发行版。默认情况下,C程序需要libc.so但不需要libc.a。
默认情况下,第二个答案是正确的。您需要提供类似-static的链接器标志来更改此首选项。请注意,此答案适用于所有库,而不仅仅是libc。
第三个答案在大多数Linux发行版中都是正确的。
对于GNU libc(随大多数Linux发行版一起提供),不建议将您的可执行文件与libc.a静态链接,并且可能无效。它是可行的,但你需要确切地知道你正在做什么并跳过一些箍,否则你的可执行文件仍然依赖于libc.so.
其他版本的libc可能更符合静态链接。