2012-03-12 151 views
2

我有一大堆的舊的C代碼,這是我用MinGW的編譯,並複製生成的庫文件到VS C++ DLL(C++/CLI)項目(名爲NBIS)目錄中,並加入鏈接器 - >輸入文件設置。下面列出了每個配置的該字段的內容。的Visual Studio 2010和MinGW

發佈配置

liban2k.a;libbozorth3.a;libcblas.a;libclapck.a;libf2c.a;libfet.a;libfft.a;libihead.a;libimage.a;libioutil.a;libjpegb.a;libjpegl.a;libmindtct.a;libmlp.a;libnfiq.a;libnfseg.a;libpca.a;libpcautil.a;libutil.a;libwsq.a;libgcc.a;libmingwex.a;libmoldname.a;libmsvcr100.a 

調試配置

liban2k.a;libbozorth3.a;libcblas.a;libclapck.a;libf2c.a;libfet.a;libfft.a;libihead.a;libimage.a;libioutil.a;libjpegb.a;libjpegl.a;libmindtct.a;libmlp.a;libnfiq.a;libnfseg.a;libpca.a;libpcautil.a;libutil.a;libwsq.a;libgcc.a;libmingwex.a;libmoldname.a;libmsvcr100d.a 

當我編譯和使用調試配置來看,它成功了。當我使用發佈配置進行編譯和運行時,出現此錯誤:「未處理的異常:System.IO.FileLoadException:由'NBIS.dll'導入的過程無法加載。」

如果我將發佈配置的C/C++ - >代碼生成 - >運行時庫更改爲「多線程調試DLL(/ MDd)」,則發佈配置能夠成功編譯和運行。有沒有人遇到類似的問題,並有解決方案或任何指導如何解決這個問題?

+1

如果我沒有錯,MS VS編譯的文件(二進制或庫)與MinGW和MinGW的一些不兼容。 – SIFE 2012-03-12 19:11:34

+0

你正在使用VC++連接使用GCC編譯的文件嗎?這很棒,我會說不可能的。聽起來像你的問題的原因是MinGW與您的發行版和調試配置調試DLL編譯。如果任何文件使用不同的設置/庫/編譯器進行編譯,則爲未定義行爲。 – 2012-03-12 19:13:32

+0

在VS2008上,使用libmsvcr90(d).a進行發佈/調試模式時,這種方式很好。這種調試/版本不一致性是2010年以前的新增功能。 – 2012-03-12 19:24:01

回答

2

根據http://msdn.microsoft.com/en-us/library/xe4t6fc1(v=vs.71).aspx,「生成調試信息(/ DEBUG)」選項會將/ OPT選項的默認值從REF更改爲NOREF,並將ICF更改爲NOICF。「這可能會刪除您真正需要的符號。將其設置爲NOREF並查看會發生什麼情況(配置屬性/鏈接器/優化頁面)。