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、 運行,即可成功。如果不成功,查看平台和配置是否在對着。