【问题标题】:Qt cross-platform issue: compiles fine on Windows, linker error on LinuxQt 跨平台问题:在 Windows 上编译正常,在 Linux 上的链接器错误
【发布时间】:2009-08-05 18:40:07
【问题描述】:

我有一些名为“GUI”的 Qt 代码。通过 Qt Creator,我能够编译(使用 GCC)它,而不会在 Windows 上产生任何抱怨。但是,当我尝试在 Linux 上编译它(再次通过 Qt Creator 使用 GCC)时,我得到一个链接器错误:

collect2: ld 返回 1 个退出状态。

我使用的唯一非 Qt 库是 STL 的向量库。

【问题讨论】:

  • 您能否发布完整的链接器错误,以便我们查看问题所在?
  • 你能显示完整的错误信息吗? ld 上方的 4-5 行返回 1 行。
  • 如果您没有 linux 机器,请获取其中一台的 VM 映像。 VMWare 应该有一些基于 linux 的 vm 设备,您可以对其进行调整以进行测试。我的一个同事做过几次。

标签: c++ qt gcc linker


【解决方案1】:

给定的错误消息只是意味着当它试图将所有目标文件链接到一个可执行文件中时,出现了问题;如果您切换到 Qt Creator 中的 Compile Output 选项卡,您应该能够从链接器本身追踪 actual 错误消息。它可能就像无法写入可执行文件应该去的位置一样简单(当我尝试重建我仍在运行的应用程序时发生了这种情况),或者它可能更严重。例如,如果您开始添加一个尚未实现其方法的类。

【讨论】:

    【解决方案2】:

    错误:“collect2:ld 返回 1 退出状态”通常在 moc 未在它应该运行的文件上运行时返回 [具体来说,任何定义 Q_OBJECT 的文件]。检查你的 moc 是否正常运行。

    此外,在 Qt Creator 中,还有一个“构建信息”选项卡。仔细检查并检查有关此错误的更多信息。

    【讨论】:

      【解决方案3】:

      删除 .moc / .obj 你可以再试一次。

      【讨论】:

        【解决方案4】:

        通常会出现以下三个问题:

        • 检查你的Qt项目文件,看看是否需要添加LIBS += library/path/etc
        • 您没有安装库
        • 如果已安装,请即时修改您的LD_LIBRARY_PATH=/missing/lib/path:$LD_LIBRARY_PATH ./binary

        【讨论】:

          【解决方案5】:

          确保您的 Qt 环境已设置并且您拥有所有库/包依赖项。

          然后运行qmake,然后运行make。如果qmake 运行,你应该没问题。

          在某些 Linux 发行版上,您需要专门安装库(包)。一些包将允许您运行程序,例如 MySQL 插件。如果你想编译,你也需要开发包。

          例如,在 Ubuntu 中您可能需要运行:

          sudo apt-get install build-essential
          sudo apt-get install libqt4-sql-mysql
          

          【讨论】:

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