2012-11-02 168 views
13

我需要將glibc靜態鏈接到我的項目,因爲目標平臺只支持一個很老的(但它可以在我的工具鏈中靜態鏈接glibc,我已經檢查過它)靜態鏈接glibc,但動態使用GCC動態鏈接glibc

不幸的是,這個應用程序必須利用pthread庫,但靜態鏈接的libpthread需要太多的空間。

我想靜態鏈接glibc和動態pthread。

運行此命令

powerpc-unknown-linux-gnu-gcc object_files -lrt -lpthread -Wl,-Bstatic -lc 

後我得到:

/powerpc-unknown-linux-gnu/bin/ld: cannot find -lgcc_s 
+0

你需要添加'輪候冊,-Bdynamic'了'-lc'後。 –

+0

哦,我很抱歉,這是我的錯誤。我想鏈接glibc靜態 – nkdm

+0

相關:http://stackoverflow.com/questions/809794/use-both-static-and-dynamically-linked-libraries-in-gcc –

回答

12

有一個-static-libgcc如果可以幫助

+0

謝謝,它的工作原理,但程序仍然太大。 – nkdm

+1

@nkdm那麼你需要去與R ..的建議uclibc – Anycorn

+10

爲了記錄libgcc不是glibc(這是這個SO問題的標題是什麼)。 glibc是C標準庫的GNU實現。 libgcc是gcc內部的一部分,並被gcc使用,「只要它需要執行一些太複雜以至於不能發出內聯代碼的操作」。 –

8

您應該使用-static,不-Wl,-static。後者繞過gcc的知識,因此gcc仍然試圖鏈接共享的libgcc_s.so而不是靜態的libgcc_eh.a

如果你的目標是動態鏈接libc而libpthread,這根本不起作用。你不能混合和匹配不同版本的libpthread;它是glibc的一部分,只是一個單獨的文件,並且內部需要匹配。即使使用相同的版本,我認爲動態鏈接libc和libpthread也會非常糟糕。

如果glibc對於您的需求太大,您可以嘗試替代libc,如uClibcmusl

+0

但我需要有動態鏈接lpthread。 -static選項將靜態鏈接所有內容。 – nkdm