无法使用ICU库进行编译 - 未定义参考' u_strlen_3_6'

时间:2016-08-18 15:18:49

标签: c icu

试图让ICU库与我的C程序一起工作,所以我可以小写UTF-8字符串。这是重现编译错误的最小示例:

的main.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unicode/ustring.h>

int main(int argc, char **argv)
{
  UChar test[100] = { 0x41, 0x42, 0x43, 0x20, 0xc6, 0xd8, 0xc5, 0x20, 0xc9, 0x20, 0xc8, 0x20, 0xd1, 0x20, 0xca, 0x20, 0xd6 };
  for (int i = 0; i < u_strlen(test); i++){
    printf("%d\n", i);
  }
}

生成文件

CC = gcc
CFLAGS = -g -O3 -std=c99
GNUCFLAGS = -g -O3 -std=gnu99 -lm

main: obj/main.o
    $(CC) $(CFLAGS) -o bin/main obj/main.o

obj/main.o: src/main.c
    $(CC) $(CFLAGS) -c src/main.c -o obj/main.o

编译器输出

gcc -g -O3 -std=c99 -o bin/main obj/main.o
obj/main.o: In function `main':
~/src/main.c:9: undefined reference to `u_strlen_3_6'
collect2: error: ld returned 1 exit status
Makefile:6: recipe for target 'main' failed
make: *** [main] Error 1

我已尝试包含http://icu-project.org/apiref/icu4c/中列出的所有标头文件而没有运气。还尝试将-licudata -licui18n -licuio -liculx -licutest -licutu -licuuc添加到Makefile中 - 同样的错误。

我在Debian GNU / Linux 8.5(jessie)上安装了以下软件包:

  • libicu52
  • libicu52-dbg的
  • libicu-dev的
  • ICU-devtools

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我认为您需要#include <unicode/utypes>.但是您应该能够通过搜索头文件来找出哪个Unicode包含文件,以找到哪个具有u_strlen_3_6的定义。

您可能还需要在makefile中的CFLAGS参数中添加-I。