我正在编写一个小型演示应用程序(在带有ICU库的Ubuntu 17.10中的C语言),它应该将UTF-8字符串数组转换为UChar字符串数组,然后根据语言环境对它们进行排序。但是,gcc给出了一行的错误消息。这是一行:
u_strFromUTF8(s[l], 512, NULL, line, -1, &err);
以下是我的变量定义:
FILE *fp;
char *line = NULL;
char lines[512][1000];
UChar *uline = NULL;
size_t len = 0;
ssize_t read;
int l = 0;
int count = 0;
UChar s[512][1000];
这是错误:
/tmp/cckFKMCm.o: In function `main':
iosort1.c:(.text+0x10c): undefined reference to `u_strFromUTF8_59'
collect2: error: ld returned 1 exit status
以下是我用于构建应用程序的icu-config
行:
#!/bin/bash
`icu-config --cc --cflags --cppflags --ldflags` -static -o iosort1 iosort1.c
据我所知,ld
正在寻找一个ICU库,版本59,而不是找到它。这些库的第57版是Ubuntu 17.10上预装的。
我已经搜索了网络,尤其是Stack Overflow,以寻找这个问题的答案。人们已经询问了许多表面上类似的问题,但是所提出的答案都没有对我有用。示例:在构建脚本中包含更多库,将库移动到行尾,添加-static
等。
我自己想到的策略包括从ICU站点下载并手动安装Fedora库的59.1版本到/usr/local
,并使用路径和库路径指向{{1的各种组合版本57和59,以及ICU库的版本57和59。我还从我的磁盘中完全删除了版本59,并且我会对预装的版本57做同样的事情,除了显然我的系统的一半依赖于它。
矛盾的是,这似乎是一个好兆头,因为如果预装的ICU库被破坏,Ubuntu 17.10的一半也会被破坏。所以很有可能我可以让事情发挥作用,但是怎么样?我不在乎我最终使用哪个版本,只要我的代码可以编译。
我想展示更多我的代码,但它应该是本书背面的答案之一"为了一堂课(我和老师一起为学生制作代码样本)。不过,如果你让我知道你想看到什么,我可能会展示一点。
感谢您的时间和专业知识。