在 Windows 上编译静态 Qt 构建时未定义的引用

Posted

技术标签:

【中文标题】在 Windows 上编译静态 Qt 构建时未定义的引用【英文标题】:Undefined references when compiling a static Qt build on Windows 【发布时间】:2010-06-24 11:10:35 【问题描述】:

我想在 Windows 平台 (Windows XP SP3) 上编译 Qt 工具包的静态版本。我下载了适用于 Windows 的最新版本并成功安装。然后我从开始菜单打开 Qt 4.6.3 命令提示符并调用:

configure -static -release -nomake examples -nomake demos -fast

配置执行良好,mingw32-make 的第一部分也是如此。在某些时候,我得到了很多未定义的引用:

mingw32-make[4]:进入目录`C:/Qt-static/4.6.3/src/tools/moc' g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_MOC -DQT_BOOTSTRAPPED -DQT_LITE_UNICODE -DQT_TEXTCODEC -DQT_NO_CAST_FROM_AS CII -DQT_NO_CAST_TO_ASCII -DQT_NO_CODECS -DQT_NO_DATASTREAM -DQT_NO_GEOM_VARIANT -DQT_NO_LIBRARY -DQT_NO_QOBJECT -DQT_NO_STL -DQT_NO_SYSTEMLOCALE -DQT_NO_TEXTST REAM -DQT_NO_THREAD -DQT_NO_UNICODETABLES -DQT_NO_USING_NAMESPACE -DQT_NODLL -I" ." -I"." -I"......\include" -I"......\include\QtCore" -I"......\include\Qt Xml" -I"....\xml" -I"c:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1. 1\include" -I"......\mkspecs\win32-g++" -o release\moc.o moc.cpp

...

g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-rel oc -Wl,-s -Wl,-subsystem,console -mthreads -Wl -o ......\bin\moc.exe release/m oc.o release/preprocessor.o release/generator.o release/parser.o release/token.o 发布/main.o -L"c:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\ Lib\" -LC:/Qt-static/4.6.3/src/tools/bootstrap/release -lbootstrap -luser32 release/moc.o:moc.cpp:(.text+0x14b): 未定义引用QByteArray::shared_ null' release/moc.o:moc.cpp:(.text+0x150): undefined reference toQByteArray::shared_ 空' release/moc.o:moc.cpp:(.text+0x156): 未定义引用`QByteArray::shared_

...

未定义的引用列表实际上要长得多。

这在相当默认的 Windows 安装中是开箱即用的。我想知道是我做错了什么还是工具包中有错误。

【问题讨论】:

你看到 QByteArry::shared_null 是在哪里定义的吗?很有可能您错误地配置了安装,然后一个如此广泛使用的软件包被破坏了。 【参考方案1】:

我也有类似的问题。在我的例子中,Visual Studio 设置了环境参数INCLUDELIB 这混淆了品牌。

解决方案是从命令行禁用它们

set INCLUDE=
set LIB=

在编译 Qt 库之前。

【讨论】:

是的,这是导致问题的一个很好的候选:-I".NET 2003..." 标志也让我想到了 mingw 和 msvc 库/头文件的混合。

以上是关于在 Windows 上编译静态 Qt 构建时未定义的引用的主要内容,如果未能解决你的问题,请参考以下文章

Qt:在 Windows、Visual Studio 2010 (VS2010) 上编译 Qt 5.0.1 时出错

在没有 X 的 Linux 上编译 Qt 应用程序

在 Raspberry 上编译 Qt5 应用程序

Cmake 无法在 qt creator/collect2 上编译简单的测试程序:错误:ld

如何在 QT Creator 中使用 mingw 在多核上编译

vs2015上编译QT程序的环境搭建