2010-04-15 129 views
2

我有一個靜態庫libsrp.a,我想從它製作一個包含所有符號的共享庫libsrp.so。請告訴我如何在Ubuntu下創建一個.so。如何使用gcc在ubuntu下製作靜態庫共享庫

感謝

+1

可能的重複http://stackoverflow.com/questions/655163/convert-a-static-library-to-a-shared-library – 2010-04-15 06:29:27

回答

3

重新編譯包含在libsrp.a旗創建位置無關代碼(FPIC)在

gcc -fpic -c foo.c 
gcc -fpic -c bar.c 

現在你可以將文件foo.o和文件bar.o到目標文件共享庫中

gcc -shared -o libshared.so foo.o bar.o 
2

使用--whole-archive標誌:

gcc -shared -o libsrp.so -Wl,--whole-archive -lsrp -Wl,--no-whole-archive 

ld man page(我的重點):

--whole歸檔 對於--whole存檔選項後,在命令行中提到的每個存檔,包括在歸檔中的每個對象文件鏈接,而不是在存檔中搜索所需的目標文件。 這通常用於將檔案文件轉換爲共享庫,強制每個對象包含在生成的共享庫中。此選項可能會多次使用。

+0

如果原始.a文件包含編譯時沒有fPIC的目標文件,新生成的相應.so文件能否正常工作? – solotim 2010-04-26 04:41:21

+1

@solotim - 我已經成功地在32位Linux上的共享對象中使用非PIC代碼 - 儘管對於64位Linux來說可能並非如此。 – 2010-04-26 23:01:12