2011-10-11 319 views
0

我一直在試圖找到正確的.a's和相關標誌,以便在Linux下靜態鏈接一個應用程序或SO。我知道 - 靜態存在,但我不能使用它,因爲我必須鏈接到一個特定的SO。使用-nostartfiles時的g ++靜態鏈接標誌-nodefaultlibs -nostdlib

換句話說,我正在尋找適當的標誌來靜態鏈接一切,除了特定的SO。

謝謝。

+0

你真的需要說明你想靜態鏈接什麼,動態地_what_。 – sehe

+0

謝謝,我已經給@Kurt S的回答添加了一個推薦。 – joe

回答

1

在我的工作場所,我們使用-Bstatic和-Bdynamic,但它們是鏈接器ld的選項。您可以使用-Wl選項使用gcc指定它們。

g++ -o app -Wl,-Bstatic -llib1 -llib2 -llib3 -Wl,-Bdynamic -llib4 app.o

上面示出了用於與LIB1LIB2,和LIB3爲靜態庫和LIB4作爲共享對象的庫鏈接命令行。

+0

謝謝,這有幫助。儘管由於某種原因libc/m/dl仍然是動態的。我正在鏈接所需的動態libfoo.so,它動態鏈接到lib/c/m/dl。這是我的應用程序沒有靜態鏈接它們的原因嗎?有沒有辦法強制libc/m/dl在應用程序中靜態鏈接,但仍然動態鏈接libfoo.so? – joe

+0

喬,靜態版本的libc,m和dl是否存在?通常他們只會提供共享版本,以便操作系統供應商可以獨立於應用程序更新它們。 –

+0

@JosephGarvin他們是的,我的是在/ usr/lib/i386-linux-gnu。雖然我確定我會在其他項目中使用g ++的靜態標誌,但現在它佔我需要的110%,它靜態地鏈接了太多的heh。我意識到c,m和dl實際上保證在系統上,我只是想超級謹慎。 – joe