【发布时间】:2016-10-03 15:59:07
【问题描述】:
我有一个 Qt 应用程序和几个使用 .pro 文件构建的库。在为 Windows 构建时,我想在调试模式下构建我的应用程序,因此链接到我的库的调试版本。如果这里是静态链接的话。我构建了我的库的调试版本。一切都好。 pdb 文件也在 build 文件夹中生成。
但是当我构建我的应用程序时,它会抱怨以下错误,将 D 附加到我的库名称中!!!
error: LNK1104: cannot open file 'MyLibD.lib'
它应该寻找 MyLib.lib 而不是 MyLibD.lib,正如我在下面在 MyApp.pro 中指定的那样。以下是我在 MyApp.pro 中链接到我的库的方式
LIBS += -L$$MyLib_build_location -lMyLib
Release:win32: LIBS += -L$$MyLib_build_location -lMyLib
Debug:win32: LIBS += -L$$MyLib_build_location -lMyLib
INCLUDEPATH += $$MyLib_include_location/
DEPENDPATH += $$MyLib_include_location/
unix:PRE_TARGETDEPS += $$MyLib_build_location/MyLib.a
Release:win32:PRE_TARGETDEPS += $$MyLib_build_location/MyLib.lib
Debug:win32:PRE_TARGETDEPS += $$MyLib_build_location/MyLib.lib
为什么 Windows 操作系统在调试模式下希望我的库附加 D?如何让 Qt 查找与 library´s .pro 中指定的 TARGET 相同的名称?
请注意,我在 Qt Creator 中使用 Visual Studio 2015 社区版作为 C++ 编译器
【问题讨论】:
-
为什么需要所有这些重复的链接器标志?
-
也许我不需要所有这些。只是想尽一切办法摆脱这个问题。关于如何链接到我的库的调试版本的任何建议?
-
@JoachimPileborg 将其简化为不附加发布和调试也会得到相同的错误。不知道如何解决这个问题。真的需要一些建议
-
我添加了
win32:CONFIG += no_lflags_merge,它消除了这个错误。但现在它抱怨以下错误。error: LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in main.obj有什么办法可以解决这个问题吗?感谢任何建议 -
不得在使用旧编译器的静态构建上混合调试和发布库,也不能在最新编译器上混合使用它们。
标签: c++ qt visual-studio-2015 qmake debug-symbols