linux下生成動態連結庫so檔案
怎樣在linux下生成動態連結庫即.so檔案?
一、
首先需要一個好的編譯工具,直接用gcc命令列編譯已經不再是一個明智之舉了,一個好的帶編譯工具的環境是很重要的,我選擇的是easyeclipse,它集成了CDT,可以很方便地編寫C和C++程式,它自動集成了gcc編譯器,編譯工作只要在編譯選項裡點一下編譯即可,方便快捷。
現在說說怎麼在easyeclipse環境下生成.so檔案吧
1.選擇新建工程,建立一個c++工程
2.在工程型別選項裡選擇 Shared Library,然後填入工程名字PXXX點選完成即可。
3.編寫程式,然後編譯就會在debug或者release裡生成一個libPXXX.so檔案,如果不要lib的起頭標記點選project選單的Properties選項,然後在彈出的介面的右邊點選Build artifact頁面,將Output prefix選項的內容清空即可。
4.如果是C++程式,注意在介面函式的前面加上extern "C"標記,在標頭檔案加上如下標記:
#ifdef __cplusplus
#extern "C"{
#endif
標頭檔案主體
#ifdef __cplusplus
}
#endif
如果不加以上標記,經過編譯後,so裡的函式名並非你編寫程式時設定的函式名,在開發環境左側的工程檔案列表中點開debug項裡的PXXX.o可以看到so檔案裡的函式名都是在你設定的函式名後面加了一個__Fi標記,比如你用的設定的函式名稱是Func(), 而so裡的函式名則為Func__Fi()或者其他的名稱。
二、如果一定要用gcc編譯器直接編譯的話就如下所示:
編譯c程式:
gcc -shared -fpic XXX.c -o XXX.so
編譯c++程式:
g++ -shared -fpic XXX.cpp -o XXX.so
注意,編寫C++程式的so檔案,一定要注意一里的第四點,否則函式名就被改變了。