之前一直在linux上做開發,沒怎么關注過windows上如何編譯動態鏈接庫。不過一直存疑,為什么windows上的動態鏈接庫是.dll配合.lib使用的,這個又是怎么生成的呢,通過一段時間的查資料和嘗試,最終發現,windows上生成動態鏈接庫之后如果需要.lib,用於編譯階段的符號查找,那么,必須要在需要導出的函數前面加一個宏。也就是__declspec(dllexport),在使用時為__declspec(dllimport)。
具體可以是
1 #ifdef MAKEDLL_EXPORTS 2 #define MAKEDLL_API __declspec(dllexport) 3 #else 4 #define MAKEDLL_API __declspec(dllimport) 5 #endif
然后記得在導出庫文件的工程中加入MAKEDLL_EXPORTS宏即可。
這樣,在生成時會生成一個dll+一個lib文件。否則,只能動態加載dll文件才能使用,並且不能直接使用庫里面的函數,需要通過動態加載的dll來調用其中的庫函數。
參考:
