【问题标题】:Visual Studio 2010 and MinGWVisual Studio 2010 和 MinGW
【发布时间】:2012-03-12 19:07:05
【问题描述】:

我有一堆旧的 C 代码,我使用 MinGW 编译,并将生成的库文件复制到 VS C++ DLL (C++/CLI) 项目(名为 NBIS)目录,并将它们添加到链接器->输入文件环境。下面列出了每个配置的该字段的内容。

发布配置

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)”,则发布配置能够成功编译和运行。有没有人遇到过类似的问题并有解决方案或有关如何解决此问题的任何指导?

【问题讨论】:

  • 如果我没记错的话,MS VS 编译的文件(二进制或库)与 MinGW 不兼容,有些与 MinGW 不兼容。
  • 您正在链接使用 VC++ 使用 GCC 编译的文件?这很大胆,我会说不可能的。听起来您的问题的原因是 MinGW 为您的发布和调试配置使用调试 DLL 编译。如果任何文件使用不同的设置/库/编译器编译,则为未定义行为。
  • 这工作得很好,在使用 libmsvcr90(d).a 的 VS2008 上的发布/调试模式下。这种调试/发布不一致是 2010 年新增的。
  • 如果我在 GCC/MinGW 中使用 VS 编译文件,我同意这是不可能的,但这是相反的。 GTK+和Qt都是用MinGW编译的,VS都可以用,所以绝对有可能……

标签: c++ c visual-studio-2010 dll mingw


【解决方案1】:

根据http://msdn.microsoft.com/en-us/library/xe4t6fc1(v=vs.71).aspx,“生成调试信息 (/DEBUG) 选项将 /OPT 选项的默认值从 REF 更改为 NOREF,从 ICF 更改为 NOICF。”这可能会删除您真正需要的符号。将其设置为 NOREF,看看会发生什么(配置属性/链接器/优化页面)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 2017-07-30
    相关资源
    最近更新 更多