【问题标题】:Hundreds of "undefined reference" errors when linking Qt application链接 Qt 应用程序时出现数百个“未定义引用”错误
【发布时间】:2015-03-31 04:22:28
【问题描述】:

我正在尝试在 Linux 上使用 mingw-w64 交叉编译适用于 Windows 的 Qt 应用程序。一切顺利编译,直到链接阶段;我收到数百个与 Qt 库有关的“未定义引用”错误。这是一个示例:http://pastebin.com/b20Ede7a

这是我的 .pro 文件:

TEMPLATE = app
TARGET = myApp
DEPENDPATH += . res src

QT += core gui
CONFIG += static

isEmpty(TTS_ENGINE) {
    TTS_ENGINE = flite
}

QMAKE_CXX = i686-w64-mingw32.static-g++
QMAKE_LD = i686-w64-mingw32.static-ld
QMAKE_CXXFLAGS += -std=c++0x -ggdb -DWINDOWS
QMAKE_LIBDIR += /opt/mxe/usr/i686-w64-mingw32.static/qt/lib /opt/mxe/usr/i686-w64-mingw32.static/lib
QMAKE_LIBS += -lSDL2_image -lSDL2_mixer -lpng -lz -ljpeg -lwebp -ltiff -lfreetype -lSDL2_ttf -llua `sdl2-config --libs` -lgif -lfontconfig -lm
INCLUDEPATH += . src /opt/mxe/usr/i686-w64-mingw32.static/qt/include /opt/mxe/usr/i686-w64-mingw32.static/include /opt/mxe/usr/i686-w64-mingw32.static/include/freetype2

# Input
HEADERS +=  bunch/of/headers
FORMS += res/desc.ui
RESOURCES += res/desc.res
SOURCES +=  bunch/of/sources

这个问题的原因可能是什么?我正在使用来自MXE 的静态 Qt4。

编辑:另外,这是i686-w64-mingw32.static-g++ -v的输出:

Using built-in specs.
COLLECT_GCC=/opt/mxe/usr/bin/i686-w64-mingw32.static-g++
COLLECT_LTO_WRAPPER=/opt/mxe/usr/libexec/gcc/i686-w64-mingw32.static/4.9.2/lto-wrapper
Target: i686-w64-mingw32.static
Configured with: /opt/mxe/tmp-gcc-i686-w64-mingw32.static/gcc-4.9.2/configure --target=i686-w64-mingw32.static --build=i686-pc-linux-gnu --prefix=/opt/mxe/usr --libdir=/opt/mxe/usr/lib --enable-languages=c,c++,objc,fortran --enable-version-specific-runtime-libs --with-gcc --with-gnu-ld --with-gnu-as --disable-nls --disable-shared --disable-multilib --without-x --disable-win32-registry --enable-threads=win32 --disable-libgomp --with-cloog=/opt/mxe/usr --with-gmp=/opt/mxe/usr --with-isl=/opt/mxe/usr --with-mpc=/opt/mxe/usr --with-mpfr=/opt/mxe/usr --with-as=/opt/mxe/usr/bin/i686-w64-mingw32.static-as --with-ld=/opt/mxe/usr/bin/i686-w64-mingw32.static-ld --with-nm=/opt/mxe/usr/bin/i686-w64-mingw32.static-nm
Thread model: win32
gcc version 4.9.2 (GCC) 

以及失败的链接命令(对单行感到抱歉):

i686-w64-mingw32.static-g++ -Wl,-s -mthreads -Wl,-subsystem,windows -o release/descend.exe object_script.descend.Release  -L'/opt/mxe/usr/i686-w64-mingw32.static/qt/lib' -L'/opt/mxe/usr/i686-w64-mingw32.static/lib' -L'/opt/mxe/usr/i686-w64-mingw32.static/qt/lib' -lSDL2_image -lSDL2_mixer -lwebp -lfreetype -lSDL2_ttf -llua `sdl2-config --libs` -lgif -lfontconfig -lflite_cmu_us_kal -lflite_cmu_time_awb -lflite_cmu_us_kal16 -lflite_cmu_us_awb -lflite_cmu_us_rms -lflite_cmu_us_slt -lflite_usenglish -lflite_cmu_indic_lang -lflite_cmu_grapheme_lang -lflite_cmulex -lflite_cmu_indic_lex -lflite_cmu_grapheme_lex -lflite -lmingw32 -lqtmain -lQtGui -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lmsimg32 -lmng -llcms2 -lm -ltiff -llzma -ljpeg -lQtCore -lpng -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32 -lz 

【问题讨论】:

  • i686-w64-mingw32.static-g++ -v 作为版本说明了什么?
  • 它给出的版本为 4.9.2。
  • 请在问题本身中显示实际的链接命令。

标签: c++ qt linker static-linking mingw-w64


【解决方案1】:

我认为您的 libQtCore.a 存档是使用不同版本的 g++ 编译的。目前它正在尝试在链接步骤中从以下路径使用它: /opt/mxe/usr/i686-w64-mingw32.static/qt/lib/libQtCore.a

如果您不打算使用此版本,请在链接步骤中指定 libQtCore.a 的路径(即使用相同版本的 gcc 编译)。

【讨论】:

  • 这些 Qt 库是在我安装 MXE 时使用相同的编译器构建的。我正在考虑放弃我的 Qt 构建并重新开始。
  • 一个好主意是同时检查包含 *.cpp 文件的 libQtCore 是否使用 gcc 而不是 g++ 编译
猜你喜欢
  • 2012-12-10
  • 2022-01-14
  • 1970-01-01
  • 2012-11-19
  • 2014-06-01
  • 2018-02-12
  • 2019-11-25
  • 2019-07-03
  • 2014-01-19
相关资源
最近更新 更多