c++ - 如何使用 msvc10 和 ICU 编译 boost 1.54?

标签 c++ regex boost icu visual-studio-2010

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

我仍然是 boost 和所有 Unicode 东西的初学者,但我是不是错过了什么或者不可能用 ICU 编译最新版本的 boost?此外,我找不到来自 boost 的任何错误报告/日志。

感谢您的帮助!

凯莉丝

最佳答案

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

就我个人而言,我只检查了调试变体。我发布的 icu 二进制文件编译和链接没有任何错误,但是当我今天检查时,它没有通过测试。只需清理和重建,一切正常。

关于c++ - 如何使用 msvc10 和 ICU 编译 boost 1.54?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19695464/

相关文章:

c++ - 拆分绝对文件路径

c++ - 不正确地终止线程?

python - 如何在 re.sub 中增加 lambda 函数的值?

C++ 如何在没有隐式转换的情况下模拟函数?

c++ - Mac 上的自制 GLFW/GLEW

regex - 在grep中使用转义字符

python - 从字符串中提取换行符

c++ - boost asio iostream - 如何获取本地IP地址

c++ boost map程序在删除后崩溃

c++ - 如何使用 boost::algorithm 库中的 replace_regex_copy()?