运行时需要ICU文件

时间:2016-05-03 11:31:28

标签: icu

为了理解ICU及其API,我编写了一个示例程序,这段代码链接的库是-licuuc和-licui18n。这些库是可用的,因为libicu-devel.x86_64包安装在测试系统上。

为了了解如何将ICU库与我的针对centOS平台的应用程序集成,我偶然发现了page,其中说:

为了简单使用ICU的预定义数据,可以安全地跳过本节的数据管理。数据内置于与ICU其余部分一起加载的库中。应用程序或执行环境不需要特定的操作或设置。

这表示如果应用程序无意添加自己的数据,则可以使用库中可用的数据。在我安装ICU的测试系统上,这些是文件:

$ sudo find . -name "*icu*"
./opt/rbt_boost/include/boost/regex/icu.hpp
./lib64/libicui18n.so.42
./lib64/libicui18n.so.42.1
./lib64/libicuuc.so.42.1
./lib64/libicuuc.so.42
./usr/lib64/libicui18n.so.42
./usr/lib64/libicule.so
./usr/lib64/libicuio.so.42
./usr/lib64/libicutu.so
./usr/lib64/libiculx.so.42.1
./usr/lib64/pkgconfig/icu.pc
./usr/lib64/libicui18n.so
./usr/lib64/libicui18n.so.42.1
./usr/lib64/libicule.so.42.1
./usr/lib64/libicuuc.so.42.1
./usr/lib64/libiculx.so
./usr/lib64/libicuuc.so.42
./usr/lib64/libicuio.so.42.1
./usr/lib64/icu
./usr/lib64/libicudata.so.42
./usr/lib64/libicule.so.42
./usr/lib64/libicutu.so.42.1
./usr/lib64/libicuio.so
./usr/lib64/libicudata.so
./usr/lib64/libicudata.so.42.1
./usr/lib64/libiculx.so.42
./usr/lib64/libicutu.so.42
./usr/lib64/libicuuc.so
./usr/bin/icu-config
./usr/share/icu
./usr/share/man/man1/icu-config.1.gz
./var/lib/yum/yumdb/l/e59bf24facac0acba1622a5180d0e2a22dda69c8-libicu-devel-4.2.1-9.1.el6_2-x86_64
./var/lib/yum/yumdb/l/7062f72703a5afbf894d617b94db3d4769fe643d-libicu-4.2.1-9.1.el6_2-x86_64

问题:

  1. 哪些ICU库(和文件)应与ICU数据应用程序一起打包,以便在运行时可用?如前所述,我使用libicui18n和libicuuc库进行链接,因此需要存在这些库。

  2. 除了以上两个图书馆之外,以名字命名的libicudata似乎是明显的候选人。正确的吗?

  3. 是否有可供使用的静态版本的libicui18n和libicuuc库?是否需要构建它?

  4. 一般而言,将ICU与产品集成的过程是什么?

    谢谢!

1 个答案:

答案 0 :(得分:0)

  1. ICU始终需要链接其数据库。
  2. 以下是very general讨论您所使用的图书馆。
  3. ICU必须使用--enable-static选项构建,以允许静态链接。
  4. 理想情况下,您需要使用pkg-config来管理与ICU的关联。

    如果您使用的是centOS,而不是静态链接(令人头疼),您可能会考虑仅针对libicu-devel包进行编译(使用上面提到的pkg-config),然后在运行时您的用户可以包括适当的libicu包。