【问题标题】:How make Qt app not append D when trying to linking to my library尝试链接到我的库时如何使 Qt 应用程序不附加 D
【发布时间】: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


【解决方案1】:

您正在构建应用程序的调试版本:它需要与调试库链接!您需要修复库的项目文件,以便调试版本可用,并带有正确的前缀。

另请注意,手动调整构建位置通常会适得其反。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    相关资源
    最近更新 更多