我正在尝试在ICU支持下构建Boost 1.70。为此,我前段时间构建了ICU(版本61.1)。在我们的内部系统中,我具有ICU的这种目录结构,我无法快速更改它,因为有多个组件正在使用该库并期望该目录结构具有这些库:
...\icu\lib (for x86 version of lib files)
...\icu\bin (for x86 version of dll files)
...\icu\lib64 (for x64 version of lib files)
...\icu\bin64 (for x64 version of dll files)
...\icu\include (include headers files for icu)
因此,在构建ICU之后,我将文件放入各自的目录中。
现在,我想构建具有ICU支持的boost 1.70,因此我在自写批处理脚本(此处以32位为例)中使用了该build命令:
set "PATH_TO_ICU=.....\icu"
...
if not exist "%PATH_TO_ICU%" (
echo "Error: Could not find path to icu. Was looking in '%PATH_TO_ICU%'"
pause
exit /b 1
)
...
:: debug 32bit / static
b2 --build-type=complete toolset=msvc-14.1 variant=debug threading=multi link=static -sICU_PATH="%PATH_TO_ICU%" -sICU_LINK="%PATH_TO_ICU%\lib" include="%PATH_TO_ICU%\include"
但是构建期间的输出向我显示了
- has_icu builds : no
...
- icu : no
- icu (lib64) : no
其他信息:我正在使用Visual Studio 2017构建它。
那么,我在这里想念的是什么?
修改
我查看了文件boost_root \ bin.v2 \ config.log并看到了这样的行
Line 132: LINK : fatal error LNK1181: cannot open input file '....\icu\lib.obj'
这也许可以解释为什么b2无法正确看到ICU。
答案 0 :(得分:0)
对于Windows,我将调查Microsoft VCPKG。我曾经使用zlib和bzip2支持从零开始构建Boost,但是我发现vcpkg更加容易。您都不需要保持vcpkg。构建boost或其他任何第三方库之后,导出boost(使用vcpkg export命令),您将获得可以在大多数地方使用的副本。 Vcpkg可以构建32或64位软件包,并可以进行静态和共享。实际上,我调整了vcpkg三胞胎以生成链接到共享crt的静态库,因此我不必担心DLL的问题。关键是vcpkg可以满足您的所有需求。实际上,如果需要增强,您可以只构建所需的组件。