静态链接ICU4C使uregex函数失败

时间:2011-07-14 08:36:52

标签: c icu

我将使用版本为4.2.1的ICU4C unicode库(该版本包装在Ubuntu 10.04中)。我做了一个简单的测试代码;只需打开一个正则表达式对象。

#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的内容?

1 个答案:

答案 0 :(得分:3)

检查你最终击中的libsicudata - 它可能是'stub'。如果您希望将ICU的数据作为静态库加载,它应该是一个数兆的libicus数据。

要调试ICU加载问题,请先调用u_init(&status),这将查看ICU是否可以加载其数据。我不知道ubuntu如何构建ICU,也许数据以不同的方式加载(例如从文件中加载)。