【问题标题】:LNK4099 linker warning with clean install of Qt SDK and Visual C++ 2008全新安装 Qt SDK 和 Visual C++ 2008 时出现 LNK4099 链接器警告
【发布时间】:2023-03-05 09:10:01
【问题描述】:

在新的 Windows 7 计算机上进行了全新安装:

  • Visual Studio 2008 SP1
  • Qt SDK 1.1.4

然后我在 Qt Creator 中创建了一个新项目。我在“Qt Widget Project”下选择了“Qt Gui Application”,并让它以 Visual C++ 2008 的桌面为目标,包括调试和发布(基本上是默认设置)。

然后我按下 Build,然后得到....

qtmaind.lib(qtmain_win.obj):-1: warning: LNK4099: PDB 'vc90.pdb' was not
found with 'c:\QtSDK\Desktop\Qt\4.7.4\msvc2008\lib\qtmaind.lib' or at
'C:\Users\JamesJ\Desktop\QtTest-build-desktop-Qt_4_7_4_for_Desktop_-
_MSVC2008__Qt_SDK__Debug\debug\vc90.pdb'; linking object as if no debug info

我一定遗漏了一些明显的东西 - Qt 的开箱即用体验肯定不应该涉及编译器/链接器警告?!?!

如何解决此链接器警告?我更喜欢将警告视为错误,所以...我想解决这个问题。

【问题讨论】:

    标签: c++ windows qt qt4 qt-creator


    【解决方案1】:

    当您在编译后将 Qt 目录(即包含 libs/pdbs 的目录)移动到不同的目录时会发生这种情况。 PDB 文件的路径嵌入在库中,因此当您移动它们时,链接器找不到它。

    在我看来,最安全/最干净的问题是在新位置重建 Qt。

    【讨论】:

      【解决方案2】:

      单独安装 Qt Library (4.8.2) 和 Qt Creator (2.5.2) 在这里工作。我不再收到 LNK4099 警告。

      确保删除 QtSDK 留下的设置:KHCU\Software\Nokia%APPDATA%\Nokia 文件夹中的密钥。

      在 QtSDK 包管理器中手动升级 QT 库也可能有效。

      【讨论】:

        【解决方案3】:

        添加

        QMAKE_LFLAGS += /ignore:4099

        到您的 .pro 文件。

        如果您不想为可执行文件或库添加 .pdb 文件,请添加

        QMAKE_CXXFLAGS += /Z7

        所以调试信息将放在 .obj 文件中。

        您可能需要删除所有 Makefile* 以更新构建规则。 在带有 MSVC 2008 SP1 的 Qt Creator 2.4.1 中测试

        【讨论】:

        • -1 禁用链接器警告并不能解决问题。解决方法很简单:将构建静态库qtmaind.lib时生成的vc90.pdb文件复制到qtmaind.lib所在目录下。
        【解决方案4】:

        无法找到解决方案。我确信重新编译 Qt 会解决这个问题,但为了简单起见,我现在想坚持使用 SDK 安装的内容。

        【讨论】:

          【解决方案5】:

          qtmain_win.obj 中嵌入的vc90.pdb 的路径与您在链接器设置中设置的路径不同。

          按照this article中的说明:

          在链接器设置中,Properties->Linker->Debugging->Generate Program Database File 的值为 $(TargetDir)$(TargetName).pdb

          在 C/C++ 设置中,Properties->C/C++->Output Files->Program Database File设置为 $(TargetDir)$(TargetName).pdb(其默认值为 $(IntDir)\vc90.pdb)。

          如果失败,您可以尝试清理并重建 Debug 版本。

          【讨论】:

          • 我使用的是 Qt Creator,而不是 Visual C++。如何在 Qt Creator 中设置这些设置?
          • 您可以通过在qmake.conf for win32-msvc2008 中设置QMAKE_CFLAGS_RELEASE = /Z7 来禁用.pdb 文件的使用(我不相信Qt Creator 可以使用它们)。这会将所有调试信息嵌入到 .obj 文件中。如果您需要使用.pdb 文件,请确保设置qmake.conf like this
          • 您是否建议重新编译 Qt?诺基亚在 Qt SDK 中提供的开箱即用的二进制文件无法正常工作吗?
          • 不,我建议您调整您的 Qt Creator 构建设置,以便它不会查找 .pdb 文件。我通过 Visual Studio 插件将 Qt 与 Visual Studio 一起使用,所以我对 Qt Creator 不是很熟悉。 Qt SDK 是否带有.pdb 文件? (我的 Qt 设置是从源代码构建的。)我想知道如果您 1)清除它们,或 2)将 .pdb.obj 目录复制到 qtmaind.lib 所在的目录,会发生什么? (#2 可能不是一个选项。)
          • 我尝试了您的步骤,但没有收到链接器警告。显然,Qt SDK 的 MSVC 版本不附带 PDB(因为它们很大)。这就是让我选择从源代码构建 Qt 的烦恼。如果您被限制使用 Qt SDK,我不知道您有什么选择。
          猜你喜欢
          • 2012-09-02
          • 2014-03-04
          • 1970-01-01
          • 2018-12-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多