首页 > 解决方案 > 构建静态qt时未解决的外部问题

问题描述

我需要使用 qt-everywhere-src-5.12.1.tar.xz 作为源在 Windows 10 上构建静态 QT 5.12.1 库

这就是我设置构建环境的方式:

CALL "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\vcvarsall.bat" amd64
SET _ROOT=C:\Dev\Qt\Qt5.12.1
SET PATH=%_ROOT%\qtbase\bin;%_ROOT%\gnuwin32\bin;%PATH%
set path="%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64\cl.exe";%PATH%
REM Uncomment the below line when using a git checkout of the source repository
REM SET PATH=%_ROOT%\qtrepotools\bin;%PATH%
SET _ROOT=

我的 QT 构建配置如下所示:

configure -prefix C:\Dev\QT_Libs -static -static-runtime -opengl desktop -debug-and-release -mp -nomake examples -nomake tests -nomake tools -skip qtwebengine -opensource -platform win32-msvc -confirm-license

配置完成后,我运行“jom”并得到多个未解析的外部

recognizer.obj : error LNK2001: unresolved external symbol "public: static struct QArrayData const * const QArrayData::shared_null" (?shared_null@QArrayData@@2QBU1@B)
compress.obj : error LNK2001: unresolved external symbol "public: static struct QArrayData const * const QArrayData::shared_null" (?shared_null@QArrayData@@2QBU1@B)
cppgenerator.obj : error LNK2001: unresolved external symbol "public: static struct QArrayData const * const QArrayData::shared_null" (?shared_null@QArrayData@@2QBU1@B)
lalr.obj : error LNK2001: unresolved external symbol "public: static struct QArrayData const * const QArrayData::shared_null" (?shared_null@QArrayData@@2QBU1@B)
main.obj : error LNK2001: unresolved external symbol "public: static struct QArrayData const * const QArrayData::shared_null" (?shared_null@QArrayData@@2QBU1@B)
cppgenerator.obj : error LNK2001: unresolved external symbol "public: static struct QMapDataBase const QMapDataBase::shared_null" (?shared_null@QMapDataBase@@2U1@B)
dotgraph.obj : error LNK2001: unresolved external symbol "public: static struct QMapDataBase const QMapDataBase::shared_null" (?shared_null@QMapDataBase@@2U1@B)
lalr.obj : error LNK2001: unresolved external symbol "public: static struct QMapDataBase const QMapDataBase::shared_null" (?shared_null@QMapDataBase@@2U1@B)
parsetable.obj : error LNK2001: unresolved external symbol "public: static struct QMapDataBase const QMapDataBase::shared_null" (?shared_null@QMapDataBase@@2U1@B)
lalr.obj : error LNK2001: unresolved external symbol "public: static struct QListData::Data const QListData::shared_null" (?shared_null@QListData@@2UData@1@B)
main.obj : error LNK2001: unresolved external symbol "public: static struct QListData::Data const QListData::shared_null" (?shared_null@QListData@@2UData@1@B)
lalr.obj : error LNK2001: unresolved external symbol "public: static struct QLinkedListData const QLinkedListData::shared_null" (?shared_null@QLinkedListData@@2U1@B)

我该如何修复它们?

标签: c++qtstatic-libraries

解决方案


我们能够在另一台电脑上成功构建 QT,使用以下命令进行配置:

REM Set up \Microsoft Visual Studio 2017, where <arch> is \c amd64, \c x86, etc.
CALL "c:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x86
SET _ROOT=d:\qt\source
SET PATH=%_ROOT%\qtbase\bin;%_ROOT%\gnuwin32\bin;%PATH%
REM Uncomment the below line when using a git checkout of the source repository
REM SET PATH=%_ROOT%\qtrepotools\bin;%PATH%
SET _ROOT=

..\source\configure.bat -no-angle -debug-and-release -opengl desktop -platform win32-msvc -skip qttranslations -skip qttranslations -prefix "d:\qt\bin" -opensource -confirm-license -nomake tests -nomake examples -static -static-runtime
jom -j 12
jom install

推荐阅读