在 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 to
QByteArray::shared_ 空' release/moc.o:moc.cpp:(.text+0x156): 未定义引用`QByteArray::shared_...
未定义的引用列表实际上要长得多。
这在相当默认的 Windows 安装中是开箱即用的。我想知道是我做错了什么还是工具包中有错误。
【问题讨论】:
你看到 QByteArry::shared_null 是在哪里定义的吗?很有可能您错误地配置了安装,然后一个如此广泛使用的软件包被破坏了。 【参考方案1】:我也有类似的问题。在我的例子中,Visual Studio 设置了环境参数INCLUDE
和 LIB
这混淆了品牌。
解决方案是从命令行禁用它们
set INCLUDE=
set LIB=
在编译 Qt 库之前。
【讨论】:
是的,这是导致问题的一个很好的候选:-I".NET 2003..." 标志也让我想到了 mingw 和 msvc 库/头文件的混合。以上是关于在 Windows 上编译静态 Qt 构建时未定义的引用的主要内容,如果未能解决你的问题,请参考以下文章
Qt:在 Windows、Visual Studio 2010 (VS2010) 上编译 Qt 5.0.1 时出错
Cmake 无法在 qt creator/collect2 上编译简单的测试程序:错误:ld