【问题标题】:MSVC is linking to release libraries in debug build instead of debug versionsMSVC 正在链接到调试版本中的发布库,而不是调试版本
【发布时间】:2013-03-08 07:11:30
【问题描述】:

我正在使用 Microsoft Visual Studio 2008 (C++)。我有一个我想在调试模式下构建的解决方案。我正在引用一些第三方库(例如 MyGUI)。在调试构建结束时,链接器会给出一个致命错误 (LNK1104),即无法找到“MyGUIEngine.lib”。所以实际上在调试模式下,链接器应该链接到“MyGUIEngine_d.lib”。为什么要查找这个库的发布版本?

我正在构建多线程调试 DLL (/MDd)。

【问题讨论】:

    标签: c++ debugging visual-c++ static-libraries


    【解决方案1】:

    “C/C++”->“代码生成”->“运行时库”设置(您已设置为“多线程调试 DLL”)控制您编译和链接的 C 和 C++ 运行时版本,并且与 3rd 方库(例如“MyGUIEngine”)无关。

    要更改您链接到的“MyGUIEngine”版本,请将“Linker”->“Input”->“Additional Dependancies”中的值更改为“MyGUIEngine_d.lib”以进行调试配置,并将“MyGUIEngine.lib”用于发布配置。

    【讨论】:

    • 是的,奇怪的是 MyGUIEngine.lib 没有设置为附加依赖项,无论是在发布还是在调试中。但这帮助我找到了问题,代码中有 pragma:#pragma comment(lib,"MyGUIEngine.lib")
    • 是的,就可以了。 #pragma 相当于将库设置为附加依赖项,只是一种不同的处理方式。如果你想坚持这种方法,你可以做类似 "#ifdef _DEBUG #pragma comment(lib, "MyGUIEngine_d.lib") #else #pragma comment(lib, "MyGUIEngine.lib") #endif 的事情。(对不起格式化,无法在 cmets 中输入代码)
    • 谢谢,我会做 #ifdef _Debug 条件。实际上,我不认为这是通过#pragma comment(lib, ) 在代码中绑定库的好方法 - 在查看项目属性时您看不到它,您必须在代码中搜索它。
    • 我 100% 同意,老实说,我自己从未使用过 #pragma 方法,如果可以选择的话,我也不会。
    猜你喜欢
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 2010-10-27
    • 2020-08-02
    • 2019-10-20
    • 1970-01-01
    相关资源
    最近更新 更多