我将使用版本4.2.1 (Ubuntu10.04中打包的版本)的ICU4C统一码库。我编写了一个简单的测试代码;只需打开一个正则表达式对象。
#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的东西?
发布于 2011-07-23 04:23:29
检查你最终点击的libsicudata --它可能是'stub‘。如果您希望将ICU的数据作为静态库进行加载,那么它应该是一个几兆字节的libicusdata。
要调试ICU加载问题,首先调用u_init(&status),这将查看ICU是否可以加载其数据。我不知道ubuntu是如何构建ICU的,也许数据是以不同的方式加载的(比如从文件加载)。
https://stackoverflow.com/questions/6690521
复制相似问题