首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态链接ICU4C导致uregex函数失败

静态链接ICU4C导致uregex函数失败
EN

Stack Overflow用户
提问于 2011-07-14 16:36:52
回答 1查看 1.1K关注 0票数 2

我将使用版本4.2.1 (Ubuntu10.04中打包的版本)的ICU4C统一码库。我编写了一个简单的测试代码;只需打开一个正则表达式对象。

代码语言:javascript
复制
#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库编译并运行,如下所示:

代码语言:javascript
复制
gcc -o test.out test.c -licui18n -licuuc -licudata -lpthread -lm
./test.out

并且结果状态代码是'0‘。就像一个护身符。

现在我决定像下面这样静态链接icu库,并运行

代码语言:javascript
复制
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的东西?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-23 04:23:29

检查你最终点击的libsicudata --它可能是'stub‘。如果您希望将ICU的数据作为静态库进行加载,那么它应该是一个几兆字节的libicusdata。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6690521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档