C++靜態庫中使用_declspec(dllexport) 不能導出函數的問題


在某項目中,有一些靜態庫,這些靜態庫中有類型命名的函數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.


免責聲明!

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



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