collect2.exe:错误:ld 返回 5 退出状态

问题描述 投票:0回答:3

我最近更新了所有 msys2 软件包,现在我无法构建我的项目。 该错误发生在链接 .dll 之一时 -

target_library.dll

我不清楚错误消息。状态 5 是什么意思?

collect2.exe:错误:ld 返回 5 退出状态

完整讯息:

g++ -Wl,-s,--relax,--gc-sections -shared -Wl,-subsystem,windows -mthreads -Wl,--out-implib,C:/msys64/workspace/Project_Root_Directory/project/src/../build/release/plugins/libtarget_library.dll.a -o ../../../../build/release/plugins/target_library.dll object_script.target_library.Release  -lglu32 -lopengl32 -luser32 -LC:/msys64/workspace/Project_Root_Directory/project/build/release -LC:/msys64/workspace/Project_Root_Directory/project/third-party/out/lib -LC:/msys64/workspace/Project_Root_Directory/project/deps/lib -lexif -ldecimal -lsqlite3 -lutils -LC:/Python35/libs -lpython35 -lkmlbase -lkmlengine -lkmldom -lkmlxsd -lminizip -luriparser -lkmlconvenience -lcore -lrender -lraster -lgui -LC:/msys64/workspace/Project_Root_Directory/project/deps/lib/target_library/win64 -LC:/msys64/mingw64/lib  C:/msys64/mingw64/lib/libQt5Widgets.dll.a C:/msys64/mingw64/lib/libQt5WinExtras.dll.a C:/msys64/mingw64/lib/libQt5Gui.dll.a C:/msys64/mingw64/lib/libQt5Network.dll.a C:/msys64/mingw64/lib/libQt5Concurrent.dll.a C:/msys64/mingw64/lib/libQt5Xml.dll.a C:/msys64/mingw64/lib/libQt5Core.dll.a

collect2.exe: error: ld returned 5 exit status
make[4]: *** [Makefile.Release:159: ../../../../build/release/plugins/target_library.dll] Error 1
make[4]: Leaving directory '/workspace/Project_Root_Directory/project/src/modules/plugins/target_library'
make[3]: Leaving directory '/workspace/Project_Root_Directory/project/src/modules/plugins/target_library'
make[2]: *** [Makefile:384: sub-target_library-make_first] Error 2
make[2]: Leaving directory '/workspace/Project_Root_Directory/project/src/modules/plugins'
make[1]: *** [Makefile:297: sub-plugins-make_first] Error 2
make[1]: Leaving directory '/workspace/Project_Root_Directory/project/src/modules'
make: *** [Makefile:44: sub-modules-make_first] Error 2

gcc 7.1.0、Qt5 5.9.1、qmake、Win7 x64

c++ dll qt5 msys2
3个回答
5
投票

我也有同样的问题。 我将我的项目与静态库链接。 mingw64 升级后,我的项目停止构建并出现相同的错误。 我发现调试版本构建成功。所以我比较了链接器标志。在 Qt 发布版本中添加此标志“

-Wl,-s,--relax,--gc-section
”。 我找不到有关“-s”标志的任何信息,但由于 this 链接,我发现 -gc-section 标志是失败的原因。 我将以下代码添加到我的 .pro 文件中,它起作用了

mingw {
        contains(QT_ARCH, x86_64): {
            LIBS+=-Wl,--no-gc-sections
        }
}

3
投票

以防万一有人发现同样的问题,请在编译器中添加以下标志 -Wl,--verbose (或在链接器中添加 --verbose)。这将显示未找到哪个库或为您提供有关问题的更多信息。


0
投票

我在自定义 GCC 构建时遇到了完全相同的问题。 我通过在不同的机器上执行不同的测试、调试和分析 Windows 生成的转储来分析该问题。我找不到确切的原因,只能找到解决方法。我把我积累的知识贴在这里供参考。

  • 该问题仅影响 Windows (MingW) 版本
  • 受影响的版本:GCC 11.3.1、Binutils 2.40
  • g++
    移动到另一个目录似乎可以解决问题
  • 添加
    -Wl,-verbose
    解决了问题
  • 使用
    gcc
    进行链接可以解决问题(仅
    g++
    受到影响)

分析 Windows 生成的转储表明,失败的代码属于 BinUtils 中 ld/ldlang.c 文件中的方法

lang_size_sections_1

© www.soinside.com 2019 - 2024. All rights reserved.