linux下生成動態連結庫
怎樣在linux下生成動態連結庫即.so檔案?
一、
首先需要一個好的編譯工具, ,一個好的帶編譯工具的環境是很重要的,我選擇的是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檔案,一定要注意一里的第四點,否則函式名就被改變了。
一、
首先需要一個好的編譯工具, ,一個好的帶編譯工具的環境是很重要的,我選擇的是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檔案,一定要注意一里的第四點,否則函式名就被改變了。
相關文章
- linux下靜態連結庫和動態連結庫的區別有哪些Linux
- 動態連結庫的生成和使用(二)
- 動態連結庫與靜態連結庫
- cmake 連結動態連結庫
- windows和linux gcc生成動態連結庫DLL和SO並用python呼叫WindowsLinuxGCPython
- Linux環境下:程式的連結, 裝載和庫[靜態連結]Linux
- 在 Linux中如何使用動態連結模組庫?Linux
- linux下的靜態庫與動態庫Linux
- 簡述Linux下的靜態庫和動態庫Linux
- 【技術向】Linux動態連結庫預載入型後門Linux
- 【連結 1】與靜態連結庫連結
- cmake:生成靜態庫和動態庫
- Linux 靜態庫生成及呼叫Linux
- 載入動態連結庫——dlopen dlsym dlclose
- C#呼叫C++動態連結庫C#C++
- 動態連結庫(DLL)的建立和使用
- linux編譯so庫不要生成字尾和軟連結Linux編譯
- Linux動態庫Linux
- 如何連結兩個名字一樣動態庫
- Windows環境下,動態連結庫(DLL)的“匯入”與“匯出”概念Windows
- [Linux]動靜態庫Linux
- P/Invoke之C#呼叫動態連結庫DLLC#
- Linux共享庫、靜態庫、動態庫詳解Linux
- 靜態連結動態連結的連結順序問題和makefile示例
- lua——alien庫實現lua呼叫C動態連結庫(dll、so)
- 使用js動態新增連結隨機連結JS隨機
- Gazebo新增模型並控制模型運動作為動態障礙物(Ubuntu16.04, Gazebo7.16),附錄動態連結庫和靜態連結庫區別模型Ubuntu
- linux下使用boost.python呼叫c++動態庫LinuxPythonC++
- 動態庫的生成和使用(二)
- IIS無法訪問動態連結庫DLL的原因
- linux 動態庫 靜態庫 函式覆蓋Linux函式
- 動態連結的相關結構
- 編譯 pyav 成 wheel 並使用 auditwheel 固化動態連結庫編譯
- JNI呼叫c動態連結庫函式程式碼實踐函式
- 在AndroidStudio下使用cmake編譯出靜態連結庫的方法Android編譯
- android下java的靜態庫和動態庫AndroidJava
- Linux系統 g++ 連結 libopencv_world.a 靜態庫編譯程式LinuxOpenCV編譯
- 靜態庫生成
- 短連結生成