2012-03-24 100 views
0

我嘗試在Visual Studio 2010 Express中的動態庫tmxParser.lib中鏈接一個靜態庫。我將靜態庫設置爲動態庫的依賴關係。當VS構建靜態庫時建立良好並創建tmxParser.lib。當VS構建動態庫時,我收到鏈接器錯誤。我試圖匹配屬性頁下的運行時庫 - >配置屬性 - > C/C++ - >代碼生成 它沒有幫助。任何人有任何想法?是否有可能將靜態庫鏈接到Visual Studio中的動態庫?

2>LIBCMTD.lib(fopen.obj) : error LNK2005: _fopen already defined in s3e_d.lib(iwcrt_stdio.obj) 
2>LIBCMTD.lib(open.obj) : error LNK2005: __open already defined in s3e_d.lib(iwcrt_win32.obj) 
2>LIBCMTD.lib(open.obj) : error LNK2005: __sopen already defined in s3e_d.lib(iwcrt_win32.obj) 
2>LIBCMTD.lib(chsize.obj) : error LNK2005: __chsize already defined in s3e_d.lib(iwcrt_win32.obj) 
2>LIBCMTD.lib(read.obj) : error LNK2005: __read already defined in s3e_d.lib(iwcrt_win32.obj) 
2>LIBCMTD.lib(close.obj) : error LNK2005: __close already defined in s3e_d.lib(iwcrt_win32.obj) 
2>LIBCMTD.lib(lseek.obj) : error LNK2005: __lseek already defined in s3e_d.lib(iwcrt_win32.obj) 
2>LIBCMTD.lib(setmode.obj) : error LNK2005: __setmode already defined in s3e_d.lib(iwcrt_win32.obj) 
+0

你最好使用他們專用的論壇:http://www.madewithmarmalade.com/devnet/forum/general – 2012-03-24 17:36:03

+0

感謝您的迴應。我已經試過他們的論壇,但沒有迴應。 – user1290166 2012-03-25 21:58:06

+0

是的,這是典型的。 「隨處跑!」的承諾!與支持和你的運氣成反比,與執行模式修補一下。 – 2012-03-25 22:01:35

回答

0

當你說你有它設置爲一個依賴,你的意思是你有它設置爲項目依賴或者是在「附加依賴」,在

Project Properties -> Librarian->General -> Additional Dependencies

0

一般情況下,是的。

您似乎遇到的問題是該庫(是否爲marmalade library?)實現了C++運行時庫中的一些方法。可能這個lib應該在不鏈接標準運行時庫的情況下使用。

可能的解決方案:

  • 沒有鏈接C++運行時在你的DLL。
    • 提取所有的obj:如果你寫的只是一個瘦包裝
    • 詢問傢伙使他們怎麼想這個應該工作
    • 使用LIB.EXE或DUMPBIN.EXE到lib這應該是可能的的lib
    • 的文件從.obj文件中刪除衝突的符號
    • 重新創建的lib

後者是obvio我們是一個醜陋的黑客,應該保留的情況下,既沒有源代碼也沒有原始開發人員可用了。

+0

感謝您的幫助。我認爲tmxParser是一個靜態庫的原因是因爲當我可以從dll動態庫的輸出類型到靜態libray(.lib)時,所有鏈接器錯誤都消失了。但是應用程序在運行時會出錯。我最終在主應用程序中包含了tmxParser的源代碼。雖然我必須更改tmxParser代碼,所以它不需要標準運行時庫。 – user1290166 2012-03-25 22:08:18