2
我打算在版本4.2.1(Ubuntu 10.04中打包的版本)中使用ICU4C unicode库。我做了一个简单的测试代码;只需打开一个正则表达式对象。静态链接ICU4C使uregex函数失败
#include <stdio.h>
#include <unicode/utypes.h>
#include <unicode/uregex.h>
int main() {
UChar zPattern[4] = {'a', 'b', 'c', 0};
UErrorCode status = 0;
URegularExpression *pExpr = uregex_open(zPattern, -1, 0, 0, &status);
return status;
};
我编译动态链接ICU库和跑,象下面这样:
gcc -o test.out test.c -licui18n -licuuc -licudata -lpthread -lm
./test.out
,结果状态代码为 '0'。像魅力一样工作。
现在我决定ICU库静态像下面链接,跑
gcc -o test.out -DU_STATIC_IMPLEMENTATION test.c -lsicui18n -lsicuuc -lsicudata -lpthread -lstdc++ -lm
./test.out
,结果状态代码为“1”。 uregex_open函数失败,状态码为'U_ILLEGAL_ARGUMENT_ERROR'。
我错过了什么来静态链接ICU4C吗?
我发现在Ubuntu下打包的libsicudata.a文件非常小(约1kb)。我无法弄清楚如何使用可能驻留在这个库文件之外的数据文件。所以我决定自己建立静态icu库并与我的项目链接。非常感谢! – araste
欢迎!也许有些东西要提交一个bug。另一种选择可能是数据是从文件加载的,例如Mac平台上的/usr/share/icu/icudt*.dat。根据您项目的需要(例如,您可能不需要转换,整理或区域设置数据),您可以通过使用数据定制程序自定义数据来节省一些空间。请参阅http://userguide.icu-project.org/icudata –