【问题标题】:Relink objects from most basic Qt application - Linker error从最基本的 Qt 应用程序重新链接对象 - 链接器错误
【发布时间】:2018-01-04 08:21:44
【问题描述】:

如果简单的演示应用(控制台项目模板)用qmake命令行编译,先试试:

SET PATH=%PATH%;C:\Qt\Qt5.9.1\5.9.1\mingw53_32\bin;C:\Qt\Qt5.9.1\Tools\mingw530_32\bin
C:\Qt\Qt5.9.1\5.9.1\mingw53_32\bin\qmake.exe -makefile C:\Software\test.pro -spec win32-g++
mingw32-make.exe
pause

现在尝试重新链接应用程序:

C:\Qt\Qt5.9.1\Tools\mingw530_32\bin\ld -o test release\main.o -LC:\Qt\Qt5.9.1\5.9.1\mingw53_32\bin -lQt5Core --verbose > ld_dump.txt
pause

错误

main.o undefined reference to _Unwind_Resume
main.o undefined reference to __gxx_personality_v0

为了比较,使用 QtWidgets 的稍微复杂的应用程序会产生更多错误(当然,我在链接器 bat 文件中添加了缺少的 Qt 库)

moc_widget.o undefined reference to strcmp
moc_widget.o QObject undefined reference to vtable for __xyyabiv1:: __class_type_info
...

谷歌搜索错误 1+2 他们说这可能是由不同的编译器引起的。但我使用的是相同的工具。

pro 文件的样子

QT += core
QT -= gui

CONFIG += c++11

TARGET = test
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += main.cpp

我是否可能需要将某种 c++11 标志传递给链接器ld

【问题讨论】:

    标签: c++ windows qt ld


    【解决方案1】:

    我认为 ld 需要更多信息(例如,它对 stdc++ 一无所知)。为什么不使用 g++ 链接呢?像这样的一行应该可以工作:

    C:\Qt\Qt5.9.1\Tools\mingw530_32\bin\g++.exe \
    -Wl,-rpath,C:\Qt\Qt5.9.1\5.9.1\mingw53_32\bin \
    -o test release\main.o -LC:\Qt\Qt5.9.1\5.9.1\mingw53_32\bin -lQt5Core
    

    【讨论】:

    • 这有效:SET PATH=%PATH%;C:\Qt\Qt5.9.1\5.9.1\mingw53_32\bin;C:\Qt\Qt5.9.1\Tools\mingw530_32\bin C:\Qt\Qt5.9.1\Tools\mingw530_32\bin\g++.exe -Wl,-rpath,C:\Qt\Qt5.9.1\5.9.1\mingw53_32\bin -o test release\main.o -LC:\Qt\Qt5.9.1\5.9.1\mingw53_32\bin -lQt5Core 我不知道我只能使用 g++ 进行链接。我以为在被mingw32-make调用之后再调用g++是无稽之谈。 ld 需要更多信息的一点:我在问题的最后问了这个问题。 https://linux.die.net/man/1/ld 的联机帮助页并没有帮助我仅使用 ld 运行它
    • 这是我发现的最小运行命令:SET PATH=%PATH%;C:\Qt\Qt5.9.1\Tools\mingw530_32\bin g++ -o test release\main.o -LC:\Qt\Qt5.9.1\5.9.1\mingw53_32\bin -lQt5Core
    • g++会调用ld(或者collect2,基本一样)。您可以使用 -v 选项运行 g++ 来查看方法。
    猜你喜欢
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    • 2021-08-28
    • 2011-09-17
    • 2012-06-06
    • 1970-01-01
    相关资源
    最近更新 更多