检测 ICU 库在 VS2017 中失败

Detection of icu libs fails with VS2017

本文关键字:失败 VS2017 库在 ICU 检测      更新时间:2023-10-16

>我正在使用VS2017构建工具从源代码构建Qt 5.11.1。 我设置的环境如下:

set QTDIR=%CD%
set PATH=%PATH%;%QTDIR%qtbasebin;C:Oracle11client11.2.0bin;C:Python27;C:ruby_2.0.0bin;C:Python27Scripts;C:Perl64sitebin;C:Perl64bin;C:GnuWin32bin;C:icubin64
call "C:Program Files (x86)Microsoft Visual Studio2017ProfessionalVCAuxiliaryBuildvcvars64.bat"
set INCLUDE=%INCLUDE%;C:appclientxproduct12.2.0client_1ociinclude;C:Python27include;C:ruby_2.0.0include;"C:mysql-5.5include;C:icuinclude";"C:Program Files (x86)Windows Kits10Include"
set LIB=%LIB%;C:appclientxproduct12.2.0client_1ocilibmsvc;C:Python27Lib;C:ruby_2.0.0lib;"C:mysql-5.5lib";C:iculib64;"C:Program Files (x86)Windows Kits10Lib"

然后调用configure脚本:

configure -prefix %QTDIR%_STAGE -platform win32-msvc -commercial -confirm-license -release -shared -qt-libjpeg -qt-libpng -no-cups -no-mtdev -nomake examples -icu -plugin-sql-mysql -plugin-sql-odbc -plugin-sql-sqlite -opengl dynamic -skip qtconnectivity -skip webengine -D _IGNORE_FINAL

该脚本执行一些工作,并且在检查配置时失败 - 找不到icu

ERROR: Feature 'icu' was enabled, but the pre-condition 'libs.icu' failed.  
Check config.log for details.

以下是config.log的相关部分:

loaded result for library config.qtbase_corelib.libraries.icu
Trying source 0 (type inline) of library icu ...
=> source failed condition 'config.win32 && !features.shared'.
Trying source 1 (type inline) of library icu ...
+ cd /d C:UsersxDocumentsqtconfig.testsicu && C:UsersxDocumentsqtqtbasebinqmake.exe "CONFIG -= qt debug_and_release app_bundle lib_bundle" "CONFIG += shared warn_off console single_arch" "DEFINES += _IGNORE_FINAL" "LIBS += -licuin -licuuc -licudt" C:/Users/x/Documents/qt/config.tests/icu
+ cd /d C:UsersxDocumentsqtconfig.testsicu && set MAKEFLAGS=& nmake
> Microsoft (R) Program Maintenance Utility Version 14.15.26726.0
> Copyright (C) Microsoft Corporation.  All rights reserved.
>   cl -c -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -O2 -MD -W0 -EHsc -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -D_IGNORE_FINAL -DNDEBUG -I. -IC:UsersxDocumentsqtqtbasemkspecswin32-msvc -Fo @C:UsersxAppDataLocalTemp8nm8F4F.tmp
> main.cpp
>   link /NOLOGO /DYNAMICBASE /NXCOMPAT /INCREMENTAL:NO /SUBSYSTEM:CONSOLE "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /MANIFEST:embed /OUT:icu.exe @C:UsersxAppDataLocalTemp8nm91F0.tmp
> main.obj : error LNK2019: unresolved external symbol ucol_open_57 referenced in function main
> main.obj : error LNK2019: unresolved external symbol ucol_close_57 referenced in function main
> icu.exe : fatal error LNK1120: 2 unresolved externals
> NMAKE : fatal error U1077: '"C:Program Files (x86)Microsoft Visual Studio2017ProfessionalVCToolsMSVC14.15.26726binHostX64x64link.EXE"' : return code '0x460'
> Stop.

我试图从config.testsicu构建独立的main.cpp

cl main.cpp /EHsc

并得到相同的链接器错误。然后我添加了库路径和库,构建成功:

cl main.cpp /EHsc /link /LIBPATH:C:iculib64 icudt.lib icuin.lib icuio.lib icule.lib iculx.lib icutu.lib icuuc.lib

但是当我添加库来配置脚本时,遇到了相同的链接器错误。

知道我做错了什么或错过了什么吗?

尝试将 icu lib 路径移动到第一个并重新配置似乎解决了问题

set lib=D:QtQt5.11.1third-partyicu-liblib;%lib%

在VS2017中测试Qt5.11.1 5.8.4 32位

D:QtQt5.11.1>cd D:QtQt5.11.15.11msvc2017buildconfig.testsicu
D:QtQt5.11.15.11msvc2017buildconfig.testsicu>set lib
LIB=D:Program Files (x86)Microsoft Visual Studio2017ProfessionalVCToolsMSVC14.15.26726ATLMFClibx86;D:Program Files (x86)Microsoft Visual Studio2017ProfessionalVCToolsMSVC14.15.26726libx86;C:Program Files (x86)Windows KitsNETFXSDK4.6.1libumx86;C:Program Files (x86)Windows Kits10lib10.0.17134.0ucrtx86;C:Program Files (x86)Windows Kits10lib10.0.17134.0umx86;;D:QtQt5.11.1third-partyicu-liblib;D:QtQt5.11.1third-partyopenssl-liblib
LIBPATH=D:Program Files (x86)Microsoft Visual Studio2017ProfessionalVCToolsMSVC14.15.26726ATLMFClibx86;D:Program Files (x86)Microsoft Visual Studio2017ProfessionalVCToolsMSVC14.15.26726libx86;D:Program Files (x86)Microsoft Visual Studio2017ProfessionalVCToolsMSVC14.15.26726libx86storereferences;C:Program Files (x86)Windows Kits10UnionMetadata10.0.17134.0;C:Program Files (x86)Windows Kits10References10.0.17134.0;C:WINDOWSMicrosoft.NETFrameworkv4.0.30319;
D:QtQt5.11.15.11msvc2017buildconfig.testsicu>nmake
Microsoft (R) Program Maintenance Utility Version 14.15.26729.0
Copyright (C) Microsoft Corporation.  All rights reserved.
link /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /SUBSYSTEM:CONSOLE "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /MANIFEST:embed /OUT:icu.exe @C:UsersharryAppDataLocalTempnm8ACC.tmp
LINK : icu.exe not found or not built by the last incremental link; performing full link
main.obj : error LNK2019: unresolved external symbol _ucol_open_62 referenced in function _main
main.obj : error LNK2019: unresolved external symbol _ucol_close_62 referenced in function _main
icu.exe : fatal error LNK1120: 2 unresolved externals
NMAKE : fatal error U1077: '"D:Program Files (x86)Microsoft Visual Studio2017ProfessionalVCToolsMSVC14.15.26726binHostX86x86link.EXE"' : return code '0x460'
Stop.
D:QtQt5.11.15.11msvc2017buildconfig.testsicu>set lib=D:QtQt5.11.1third-partyicu-liblib;%lib%
D:QtQt5.11.15.11msvc2017buildconfig.testsicu>nmake
Microsoft (R) Program Maintenance Utility Version 14.15.26729.0
Copyright (C) Microsoft Corporation.  All rights reserved.
link /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /SUBSYSTEM:CONSOLE "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /MANIFEST:embed /OUT:icu.exe @C:UsersharryAppDataLocalTempnmA818.tmp