如何使用 msvc10 和 ICU 编译 boost 1.54

How to compile boost 1.54 with msvc10 and ICU?

本文关键字:boost 编译 ICU 何使用 msvc10      更新时间:2023-10-16

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

我尝试了所有 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 文件(booste locale 文件夹中的 vc10.mak)进行编译,但它为我生成了 1.53 版本的库。我认为这只是 mak 文件中的一个错误,所以我只是在 mak 文件中将每个 1.53 替换为 1.54 后尝试重新编译,但无事可做,"has_icu 构建"仍然告诉我"否(缓存)",并且我的应用程序使用一些 ICU 的东西仍然无法链接。

我仍然是 boost 的初学者,以及所有这些 Unicode 的东西,但我错过了什么,或者无法使用 ICU 编译最新版本的 boost ?此外,我找不到来自提升的任何错误报告/日志。

感谢您的帮助!

卡利斯

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

就个人而言,我只检查了调试变体。我的发布 icu 二进制文件编译和链接没有任何 arror,但是当我今天检查时,它没有通过测试。只是一次清洁和重建,一切都很完美。