带有icu/unicode支持的Boost.Regex

5

如何使用icu / unicode支持构建Boost.Regex?我的编译器是GCC,IDE是Eclipse C ++。如何在Eclipse中配置二进制文件? 我尝试过执行“bjam --sHAVE_ICU = 1 toolset = gcc”来实现这个目标,但它没有成功。 当我使用“bjam -has_icu”检查是否启用了icu支持时,我仍然得到“has icu builds:no”的提示。

3个回答

5
我使用-sICU_PATH=<icuRoot>-sICU_LINK="-L<icuLibDir>"来编译Boost并与ICU链接。
我也曾看到Boost无法正确检测到ICU,需要修补文件has_icu_test.cpp(从它的main()函数中简单地返回0)。如果您知道其他一切都已经设置好了,这样做就可以起作用。

1
icuRoot和icuLibDir在哪里?它们都在/usr/local/lib/pkgconfig下吗? - Mehdi Haghgoo
@JasonStack 这些是 你的 路径 - 也就是说,你构建 ICU 的地方。 - NuSkooler
我使用 ./configure --prefix=/usr/local 构建了 ICU,那么我应该将 /usr/local 作为 icuRoot 吗? - Mehdi Haghgoo
--prefix 用于安装。如果您正在为 Android 构建,则需要一个本地路径来简单地放置二进制文件(稍后将在设备上使用)。 - NuSkooler
我正在为 Fedora 24 构建 Aegisub,但每次都会抱怨缺少 ICU 支持的 boost。从源代码构建 boost 和 ICU 也没有帮助。我已经在这里打开了一个问题线程(https://ask.fedoraproject.org/en/question/94430/cannot-build-aegisub-in-fedora-configure-error-aegisub-requires-that-boost-be-built-with-icu-support/?comment=94439#comment-94439)。 - Mehdi Haghgoo
构建1.67时,我发现-sICU_PATH不再被接受作为参数。 - Lothar

1

通过在执行 b2 时直接添加包含 ICU 目录的 include 路径到 cflags 中,解决了这个问题。例如:

./b2 --with-regex
cflags="-O0 -I\"$ICU_PATH/include\"

您可能还需要添加 ICU 库的路径,而且还需要将库的完整路径添加到链接器中。类似于这样:

export ICU_LINK="-L\"$ICU_PATH/lib\" -l\"$ICU_PATH/lib/libicudata.a\" -l\"$ICU_PATH/lib/libicui18n.a\" -l\"$ICU_PATH/lib/libicuuc.a\""
./b2 --with-regex
cflags="-O0 -I\"$ICU_PATH/include\"
-sICU_LINK=$ICU_LINK \

0

巨兽和重量级选手

在某些Unix系统上,我成功地使用了以下命令:

./b2 link=static,shared -sICU_PATH=/usr/local install

在该系统中,ICU头文件安装在/usr/local/include中,ICU库安装在/usr/local/lib中。

为了测试是否已安装ICU头文件(例如在/usr/local/include中),请查看目录/usr/local/include/unicode/是否存在,并且其中有许多头文件(例如symtable.h)。

注意,当我按照网络上的通用建议并将-sICU_LINK='-L/usr/local/lib'传递给boost的b2时,ICU检测(版本1.62和1.63)失败了。

在先前的答案中,用户“NuSkooler”提到修补boost文件has_icu_test.cpp以简单地返回0;可以绕过测试,使boost相信所有与ICU相关的问题都已解决。

然而,请确保您还从该文件中删除所有ICU相关的函数调用和头文件,因为通常情况下,has_icu_test.cpp首先无法编译或链接,因为boost内部找不到ICU库或头文件。

有了这些,我可以确认Aegisub的configure现在对我通过了ICU测试。

(这些都是因为约翰·赫特(John Hurt)不幸去世,我试图将字幕放到天堂之门的剪辑中,以便送给一位朋友。)

b.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接