在某項目中,有一些靜態庫,這些靜態庫中有類型命名的函數GET_XXX。在一次項目結構調整的時候,我想將調用這靜態庫的代碼編譯成DLL,並且將這些Get函數導出,我就直接就這些函數前面添加了_declspec(dllexport),
然后代碼結構就成為:
靜態庫A: 包括很多 _declspec(dllexport) GET_XXX 函數。
動態庫B:未直接調用 GET_XXX
調用B的應用程序C:動態Load動態庫B,然后使用GetProcAddress獲取函數地址后使用。
但是很不幸編譯出來的中一直沒有這些函數。
百思不得其解,最后在網上發現下面的信息(from:http://support.microsoft.com/kb/141459):
When you build a DLL from component libraries (.lib files) that have functions declared with _declspec(dllexport) to export them from the DLL, the functions aren't exported or even included in the DLL.
解決方案:
1、DEF文件或者是在LInk時添加/export:func.
2、在其它地方強引用。
3、把GET等函數所在源碼直接放到dll代碼里編譯。
對於我的工程,1、2不適合,所以我使用了3.