10

I've recently updated all msys2 packages and now I can't build my project. The error occurs at the moment of linking one of .dlls - target_library.dll.

The error message isn't clear to me. What does status 5 mean?

collect2.exe: error: ld returned 5 exit status

Full message:

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

Andrei Smeltsov
  • 528
  • 6
  • 14
  • You haven't posted the linker error diagnostic, just the "That didn't work. Goodbye" epilogue. Post the complete build log from the failing `g++ ...` command to the end. – Mike Kinghan Jul 13 '17 at 10:37
  • @MikeKinghan The complete build log takes more than 12Mb. It is a huge project. I suppose the link command itself is enough. – Andrei Smeltsov Jul 13 '17 at 11:23
  • Just the complete build log from the failing g++ ... command to the end of the above. – Mike Kinghan Jul 13 '17 at 12:55
  • @MikeKinghan Linkage fails. It is in the original post. Before that there's a bunch of object files being successfully created. – Andrei Smeltsov Jul 13 '17 at 14:02
  • 1
    I think a lot of people are upvoting this because we've heard of or seen this error before. Yes, sometimes ld just fails without giving an error message. Maybe you should just use a different programming environment. But if you really want to fix MSYS2, I'd probably start by reducing the test case as much as possible. Ideally, you'd just start with a few simple source files and run some GCC commands to produce the error. Then you could use `-v` to see exactly how `gcc` is invoking `ld`, and you could invoke it yourself. You could then debug `ld` using gdb (with a debug version of `ld`). – David Grayson Jul 13 '17 at 16:04
  • @DavidGrayson this is a good advice. Thank you. – Andrei Smeltsov Jul 14 '17 at 22:53

2 Answers2

5

I had the same issue. I link my project with static library. After mingw64 upgrade, my project stoped building with the same error. I found out that debug version built successfully. So i compared linker flags. In release version Qt add this flags "-Wl,-s,--relax,--gc-section". I couldn't find any information about "-s" flag, but due to this link i figured out that -gc-section flag was the reason of fail. I added the following code to my .pro-file, and it worked

mingw {
        contains(QT_ARCH, x86_64): {
            LIBS+=-Wl,--no-gc-sections
        }
}
Andrey Semenov
  • 901
  • 11
  • 17
3

Just in case someone finds this due the same problem, please, add the following flag to your compiler -Wl,--verbose (or --verbose to the linker). This will show which library was not found or give you more information about the problem.

  • Interestingly, adding `--verbose` to the linker fixed the error for me. If I leave it away again, the error comes back. xD – Jeronimo Dec 03 '19 at 13:23