2011-08-15 61 views
1

我無法鏈接由「純」C .c文件的項目中的幾個cpp文件組成的靜態庫。 .c文件是尋找與語法_FUNCTIONAME一個函數對象,就像這樣:強制Visual Studio C++靜態庫的導出名稱

logforwarder.obj : error LNK2001: unresolved external symbol _getEventLogProviders 

不過的.lib文件導出這樣的: 轉儲文件的M:... \發佈\ recvevent.lib

File Type: LIBRARY 

    Exports 

     ordinal name 

        [email protected]@[email protected] (unsigned int __cdecl _getE 
ventLogProviders(char * *)) 

    Summary 

      C3 .debug$S 
      14 .idata$2 
      14 .idata$3 
      4 .idata$4 
      4 .idata$5 
      C .idata$6 

我exports.def文件看起來像這樣:

EXPORTS 
getEventLogProviders=getEventLogProviders @4 

庫項目可以成功連接,導出功能是這樣的:

Dump of file M:\...\screenshot.lib 

File Type: LIBRARY 

    Exports 

     ordinal name 

        [email protected] 

我在做什麼錯?

回答

2

裝飾在導出的函數的開頭添加下劃線,並在末尾添加@和數字。因此,您.def文件應該是這樣的:

[email protected] 

因爲它是現在,在.def沒有任何影響,因爲錯位的功能沒有被正確寫入。

+0

幾乎在那裏,現在dumpbin給我:「getEventLogProviders」作爲函數名,而鏈接仍然搜索「_getEventLogProviders」。 – Konrads

+0

工作線路:「_getEventLogProviders = _getEventLogProviders @ 4」 – Konrads

+0

這是另一個錯誤。使用導出的程序不使用正確的調用約定。它使用__cdecl而不是__stdcall。這會在運行時不平衡堆棧,很難診斷。 –