2017-01-12 63 views
0

我的問題是,libc.a總是需要,即使我希望鏈接libc.so. 我搜索互聯網,並讓3個可能的答案(發生衝突)爲什麼一個簡單的c程序鏈接到libc.a而不是libc.so?

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

靜態鏈接庫當然需要靜態鏈接。 –

+1

你從哪裏獲得這三個答案? –

+0

如果您只動態鏈接,那麼什麼樣的代碼可以做動態鏈接? – stark

回答

2

如果要鏈接libc.so而不是libc.a,則不需要執行任何特殊操作,這是默認設置。

第一個答案已過時,不適用於大多數正常的Linux發行版。默認情況下,C程序需要libc.so而不是libc.a.

第二個答案在默認情況下是正確的。您需要提供像-static這樣的鏈接標誌來更改此首選項。注意這個答案適用於所有庫,而不僅僅是libc。

第三個答案在大多數Linux發行版中都是正確的。

對於GNU libc(與大多數Linux發行版一起提供),建議不要將您的可執行文件與libc.a靜態鏈接,並且可能無法正常工作。這是可行的,但你需要確切地知道你在做什麼,並跳過一些箍環,否則你的可執行文件仍然依賴於libc.so.

其他版本的libc可能更加靜態鏈接友好。

相關問題