在一個項目中,我的同事創建了一個靜態庫,例如liba.a,它與應用程序鏈接。如何將libc.a鏈接到arm-linux中的共享庫arm-none-linux-gnueabi-gcc
在liba.a中,他將libc malloc()覆蓋爲其所有者版本。
我創建了一個共享庫libs.so,它也與應用程序鏈接。
問題是當我的libs.so鏈接到應用程序時,在我的libs.so中使用的malloc()將成爲liba.a中的一個,而不是標準libc.so中的那個,這會導致問題。
然後,我想靜態鏈接libc.a到我的libs.so,我用gcc的-static -shared -fPIC標誌。
但我總是得到arm-2012.03/bin /../ lib/gcc/arm-none-linux-gnueabi/4.6.3 /../../../../ arm-none-linux -gnueabi/bin/ld:arm-2012.03/bin /../ arm-none-linux-gnueabi/libc/usr/lib/libc.a(dl-tsd.o)(.text + 0x14):R_ARM_TLS_LE32 relocation not允許共享對象。
有沒有人有想法呢?
向前感謝。
我認爲-static -share不應該混合使用...... – Jeyaram
下面的文本從codedgery的ld.pdf中拷貝下來:「-static不要鏈接到共享庫,這隻對共享的平臺 有意義庫支持** 選項可與'-shared'**一起使用,這意味着創建了共享庫 ,但是必須通過從靜態庫中提取條目來解析庫的所有外部參考文件必須解析爲 「。 –
@DavidChyi:這只是說靜態和共享可以混合使用,但並不是說這是個好主意。一般而言,編譯器有許多選項,這些選項對於普通應用程序來說不是一個好主意。它們對編譯內核,引導程序,微控制器代碼等特殊情況非常重要。 –