Linux和Windows平台 動態庫.so和.dll文件的生成


Linux動態庫的生成

1、 純cpp文件打包動態庫

將所有cpp文件和所需要的頭文件放在同一文件夾,然后執行下面命令

gcc -shared - fpic *.c -o xxx.so;

g++ -std=c++17 - fpic *.cpp -o xxx.so;

[C++17標准,需要高版本gcc,本人采用gcc 8.2.0]

其中*.c代表所有的c文件,xxx.so中的xxx代表so動態庫的名字, -std=c++17代表采用C++17標准編譯。

2、 多個cpp文件和so庫一起打包成一個so

g++ -std=c++17 -fpic AFClassifier.cpp -shared -L. -lRandom -o test.so

3、 多個so打包為一個so

如果有兩個so,分別為 libRandom.so和libAF.so,並且在當前目錄下面,則執行下面命令:

g++ -std=c++17 -fpic -shared -L. -lAF -lRandom -o test.so

如果libRandom.so和libAF.so不在當前目錄,-L 后面要加上目錄,比如在當前目錄的下一層目錄,則:

g++ -std=c++17 -fpic -shared -L ./ -lAF -lRandom -o test.so

 

===========================================================

Windows動態庫的打包(dll)

1、 打開工程,在解決方案中打開屬性—》配置屬性:做以下修改:

“目標文件擴展名”:由默認的exe修改為dll

“配置類型”:選擇 動態庫dll

同時注意 配置 和 平台 的版本。最好把release和debug下面的配置屬性都做上面的修改。

2、 在接口文件(也就是最重要的頭文件)添加兩處代碼:

1)

#ifdef LIBRARY_EXPORTS

#    define LIBRARY_API __declspec(dllexport)

#else

#    define LIBRARY_API __declspec(dllimport)

#endif

2)在調用函數前面加上“LIBRARY_AP”

當然 如果在接口函數前面直接寫上__declspec(dllimport)有時也可以,但是當遇到靜態變量或者靜態函數時,就不行了,我自己沒有真實測試過,看的博文這樣介紹的,博文連接如下:

【參考:https://blog.csdn.net/clever101/article/details/5421782】

3、 點擊生成解決方案,即可生成.dll文件。版本號要對應上前面的配置和平台。輸出平台顯示生成成功,即可查看生成的dll文件。

如果是X86平台,則對應就是release和debug文件夾下面的dll文件

如果是X64平台,則對應X64文件夾里面的release和debug文件中的dll文件。

===========================================================================

Windows動態庫dll文件的使用

1、 從別人那里獲取的動態庫最好要求x86,x64兩個release版本。方便不同版本的調試,雖然現在基本上用的都是X64。

2、 將動態庫dll和靜態庫lib,以及接口文件一起copy到工程里面,在調試的主函數中加入下面這行代碼:#pragma comment(lib,"XXX.lib"),然后將接口文件import進來。Dll文件只需要放在工程中即可,代碼中不需要管dll文件,因為lib文件已經告訴你的工程該怎么調用dll。

3、 運行,即可成功。如果不成功,查看平台和配置是否在對着。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM