2014-03-13 46 views
0

我無法測試我的應用程序,因此決定了解更多信息。這是情況:我有一個第三方靜態庫,我喜歡在我的MFC應用程序中使用它。我創建了一個基於MFC對話框的應用程序,它在調試和發佈中均成功構建。我對MFC Single文檔更感興趣,因此我創建了一個MFC SD應用程序並按照之前的方式鏈接了標題和庫,然後開始構建。static libary debug vs release

用MFC SD應用,這些是我得到:

  1. 在調試模式設置爲 「多線程調試DLL(/ MDD)」 RT選項,得到了 一些LNK2005錯誤的東西。

  2. 與 「多線程DLL(/ MD)」 設置爲RT選項,調試模式有對夫婦只生警告:

    LINK:警告LNK4098:defaultlib 'MSVCRT' 與使用其他庫的衝突;使用/ NODEFAULTLIB:庫

    鏈接:警告LNK4098:defaultlib'LIBCMT'與使用其他庫相沖突;使用/ NODEFAULTLIB:庫

  3. 與設置爲多線程DLL(/ MD)RT選項釋放模式」有沒有錯誤或警告

一下這些指示?難道這些預期。我希望能夠在調試模式下運行我的應用程序,首先調試它,然後將其變爲釋放模式。在這方面有所不同?

回答

0

問題是你使用co這是編譯與不同的CRT選項。我相信它是由你的靜態lib引起的。

如果您收到警告,如1. + 2。它表明你的一部分代碼鏈接到一個CRT代碼平臺,而你的代碼的其他部分需要其他CRT代碼。

效果是,你有malloc的代碼,免費的新,在你的exe中刪除幾個版本。因此,您的代碼的一部分可能會使用調試內核分配內存,另一部分代碼會使用發行版來釋放它,反之亦然。

或者你的代碼設置的語言環境,而這個區域是不是在使用不同的CRT另一部分代碼使用...

事實上,如果你不使用相同的CRT標誌的靜態庫沒有保證你的代碼可以工作,奇怪的事情不會發生。

只要你有一個靜態庫

  • 編譯器版本
  • 調試所有的設置/釋放
  • CRT用途(如DLL或靜態)
  • MFC使用(靜態或DLL)

必須匹配!