1

我正在尝试在 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位为例):

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。

4

1 回答 1

0

对于 Windows,我会调查Microsoft VCPKG。我曾经使用 zlib 和 bzip2 支持从头开始构建 Boost,但我发现 vcpkg 更容易。您也不需要保留 vcpkg。在构建 boost 或任何其他 3rd 方库后,导出 boost(使用 vcpkg 导出命令),您将获得可以在任何地方使用的副本。Vcpkg 可以构建 32 位或 64 位包和静态和共享。我实际上调整了 vcpkg 三元组来生成一个链接到共享 crt 的静态库,所以我不用担心 DLL。关键是 vcpkg 可以满足您的所有需求。事实上,对于 boost,如果你愿意,你可以只构建你想要的组件。

于 2019-07-29T19:45:35.123 回答