Boost.Locale
构建库

构建 Boost.Locale

依赖项

  • 强烈建议使用 ICU 3.6 或更高版本库
  • 如果没有提供 ICU 库,则在 POSIX 平台上需要 iconv 支持。

平台注意事项

  • 如果你在 Windows 上使用 Boost.Locale,且 MinGW/GCC 版本低于 4.5,你将只能使用静态版本。低于 4.5 版本的 Mingw/GCC 不支持动态运行时链接。
    将 Boost.Locale DLL 与 MinGW gcc 一起使用,还需要与运行时库 libstdc++ 和 libgcc 进行动态链接。一些 gcc 构建默认使用静态链接,因此请确保你使用了正确的链接选项。
  • AIX 的 iconv 缺少 Boost.Locale 所需的重要字符集,因此你需要使用 GNU iconv 或链接 ICU 库。
  • 如果在 Darwin/Mac OS X 构建中找不到 iconv 库,请确保没有安装多个 iconv 版本,并提供 -sICONV_PATH 构建选项以指向 iconv 库的正确位置。

构建过程

现在你只需要调用 bjam

./bjam --with-locale stage

或者在 Windows 上

.\bjam --with-locale stage

如果你正在使用自定义的 ICU 构建,或者你正在使用 Microsoft Windows,你需要使用 -sICU_PATH 选项提供 ICU 库的位置路径。

例如

  • 如果你的 icu 构建放在 /opt/icu46,文件结构如下
    /opt/icu46/include/unicode/uversion.h
    /opt/icu46/include/unicode/calendar.h
    ...
    /opt/icu46/lib/libicudata.so
    /opt/icu46/lib/libicui18n.so
    ...
    那么你需要提供选项 -sICU_PATH=/opt/icu46
        ./bjam --with-locale -sICU_PATH=/opt/icu46  stage
  • 如果你的 icu 构建放在 c:\icu46,文件结构如下
    c:\icu46\include\unicode\uversion.h
    c:\icu46\include\unicode\calendar.h
    ...
    c:\icu46\bin\icudt.dll
    c:\icu46\bin\icuin.dll
    ...
    c:\icu46\lib\icudt.lib
    c:\icu46\lib\icuin.lib
    ...
    那么你需要提供选项 -sICU_PATH=c:\icu46
        .\bjam --with-locale -sICU_PATH=c:\icu46  stage
注意
当使用 Microsoft Visual Studio 时,不要忘记在此路径中放置 ICU 库的 debug 和 release 版本,以便 Boost.Build 可以正确链接 Boost.Locale 的 debug 和 release 版本。

构建选项

Boost.Locale 支持以下选项,其值可以是 offon

  • boost.locale.icu=off 即使 ICU 库存在,也会阻止构建 ICU 后端
  • boost.locale.iconv 启用或禁用 iconv 后端。在 Windows 和 Solaris 上,默认情况下是关闭的
  • boost.locale.winapi=off 禁用 winapi 后端。在 Windows 和 Cygwin 上,默认情况下是开启的
  • boost.locale.std 启用或禁用 std 后端。当使用 Sun Studio 时,默认情况下 std 后端是被禁用的。
  • boost.locale.posix 启用或禁用 POSIX 后端的支持。在 Linux 和 Mac OS X 上,默认情况下是开启的

此外,Boost.Locale 还支持以下选项

  • -sICU_PATH=/icu库路径 - ICU 库的位置
  • -sICONV_PATH=/iconv库路径 - iconv 库的位置

例如

  • 在 Windows 上构建库,仅使用 ICU 后端
        .\bjam boost.locale.winapi=off boost.locale.std=off -sICU_PATH=c:\icu46 --with-locale stage
  • 在 Linux 上构建库,仅使用 std 后端
        .\bjam boost.locale.posix=off boost.locale.icu=off --with-locale stage

运行单元测试

你可以通过使用 libs/locale/test 项目参数调用 bjam 来运行单元测试

./bjam libs/locale/test

二进制兼容性

Boost.Locale 的构建考虑了二进制兼容性。 切换本地化后端(开启或关闭),或者是否使用 iconv,都不会影响二进制兼容性。 因此,如果一个动态库是用所有可能的后端构建的,那么其他只用例如 stdposixwinapi 后端编译的动态库仍然是二进制兼容的。

使用二进制文件中未包含的功能将导致异常。 例如,如果当库不支持 ICU 后端时,你尝试使用边界分析或日历 facets,你将收到异常。