2

我正在尝试用 unicode 制作我的第一个应用程序,并且我理解为什么仍然有这么多应用程序无法处理它。我很少看到建议尽可能使用 utf-8(和 std::string)的文章。我需要跨平台,我实际上尝试处理Windows。因为我需要很多正则表达式,而且我发现 boost 非常有用,所以我试图用 ICU 编译它,但我一整天都在失败。我很想知道是否有人已经成功地使用 ICU (5.2) 用 msvc10.0 编译了 boost (1.54) ?

我尝试了所有 bjam 组合(首先尝试编译语言环境)但没有成功,并且变得有点深奥,例如:

>.\bjam --with-locale -sHAVE_ICU=1 -sICU_PATH=<ICU_path> stage
>.\bjam --with-locale -sHAVE_ICU=1 -sICU_PATH=<ICU_path> -a stage
>.\bjam --with-locale -sICU_PATH=<ICU_path> stage
>.\bjam --with-locale -sICU_PATH=<ICU_path> -a stage
>.\bjam --with-locale stage
>.\bjam --with-locale -a stage
>.\bjam --with-locale -sHAVE_ICU=1 -sICU_PATH=<ICU_path> install
>.\bjam --with-locale -sHAVE_ICU=1 -sICU_PATH=<ICU_path> -a install
>.\bjam --with-locale -sICU_PATH=<ICU_path> install
>.\bjam --with-locale -sICU_PATH=<ICU_path> -a install
>.\bjam --with-locale install
>.\bjam --with-locale -a install
...

如您所见,我对 boost 并不熟悉。我骑着很少有人抱怨尝试相同,但在旧版本上,他们的解决方案不适用于我。我注意到 ICU 二进制文件没有与调试库一起分发,所以我自己编译了 ICU,但这并没有解决任何问题(我也尝试使用 bjam 和仅发布变体)。

我还尝试使用 mak 文件(boost locale 文件夹中的 vc10.mak)进行编译,但它为我生成了 1.53 版本的库。我认为这只是 mak 文件中的一个错误,所以我只是在将 mak 文件中的每个 1.53 替换为 1.54 后尝试重新编译,但无事可做,“has_icu builds”仍然告诉我“没有(缓存)”,而我的使用一些 ICU 东西的应用程序仍然无法链接。

我仍然是 boost 的初学者,并且使用了所有 Unicode 的东西,但是我是否遗漏了什么或者不可能用 ICU 编译最新版本的 boost?此外,我无法从 boost 中找到任何错误报告/日志。

谢谢你的帮助 !

凯利斯

4

1 回答 1

1

似乎今天是更好的一天,我的应用程序现在可以成功编译并与 boost 1.54 和 ICU 链接。最后那是我的错,这么愚蠢的东西,但如果有人有同样的问题,来到这个话题,我只建议两件事:编译你自己的 ICU(二进制文件不提供提升所需的调试)并运行icucheck.bat 来测试你的二进制文件,在这两种变体中。

就个人而言,我只检查了调试变体。我的发行版 icu 二进制编译和链接没有任何错误,但是当我今天检查时,它没有通过测试。只需清洁和重建,一切都完美无缺。

于 2013-10-31T18:59:16.160 回答