天天看點

靜态庫 .a 轉成共享庫 .so

.a 是有一系列 .o 檔案通過 ar 程式打包在一起的靜态庫,要把它轉成動态庫隻需先解開,生成一堆 .o 檔案,再通過編譯器(比如 gcc 或 ifort,視具體情況而定)編成動态庫即可。

ar -x libtest.a

gcc -shared *.o -o libtest.so

不過需要注意的是:

(1) 并非所有 .a 都能轉成 .so,前提是 .a 解出的 .o 檔案中含有“位置獨立代碼”,如果不含的話則無法生成 .so。而“位置獨立代碼”要求在編譯生成 .a 時指定 -fpic 或 -fPIC 選項才行。是以,如果隻有一個 .a 檔案而沒有相應源檔案且這個 .a 中不含“位置獨立代碼”,那麼它無法轉成 .so 檔案。

(2) 我覺得生成 .so 時應該用與生成 .a 時一樣的編譯器,如果不一樣不知道是否會造成問題。