当尝试在Linux上针对ICU Unicode库链接C代码时出现奇怪的问题

问题描述 投票:0回答:1

我一直在使用ICU Unicode库,最近遇到了一些奇怪的链接错误,这些错误困扰了我。

我将代码缩小为一个最小的示例,该示例演示了链接器错误:

#include <unicode/uchar.h>
#include <unicode/ustdio.h>
#include <unicode/utypes.h>
//#include <unicode/coll.h>

int main(void) {
    UFILE *ustdout;
    ustdout = u_get_stdout();
    UChar32 *ustr1 = L"Ich bin glücklich!";
    u_fprintf(ustdout, "%S\n", ustr1);
    return(0);
}

在我的Linux Mint 19.2 Cinnamon 64位系统上,根据icu-config输出,编译上面的文件给我:

$ gcc c-icu-test-3.c -I/usr/include -licui18n -licuuc -licudata -o c-icu-test-3.bin
/tmp/ccjku7rS.o: In function `main':
c-icu-test-3.c:(.text+0x9): undefined reference to `u_get_stdout_60'
c-icu-test-3.c:(.text+0x34): undefined reference to `u_fprintf_60'
collect2: error: ld returned 1 exit status

根据“ icu-config --cc --cflags --cppflags --ldflags-libsonly”,我使用的是正确的命令行选项。

I have将该问题归结为与“ U_ICU_ENTRY_POINT_RENAME”宏有关,并发出了“查找/ usr / include / unicode / -regextype gnu-awk -regex'(.. 。c $)|(..>。h $)'-exec grep -H -n -P'^#define + U_ICU_ENTRY_POINT_RENAME。* $'{} \;“输出:

$ find /usr/include/unicode/ -regextype gnu-awk -regex '(.*\.c$)|(.*\.h$)' -exec grep -H -n -P '^#define +U_ICU_ENTRY_POINT_RENAME.*$' {} \;
/usr/include/unicode/uvernum.h:109:#define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX,U_LIB_SUFFIX_C_NAME)
/usr/include/unicode/uvernum.h:113:#define U_ICU_ENTRY_POINT_RENAME(x)    U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX)

我已确保拥有所有必要的头文件和库。不过,那里似乎存在某种类型的版本不匹配,但我不知道如何解决。

任何帮助将不胜感激。

谢谢,

jdb2

我一直在使用ICU Unicode库,最近遇到了一些奇怪的链接错误,这些错误令我感到困惑。我将代码范围缩小到一个最小的示例,...

linux gcc unicode linker icu
1个回答
0
投票

您还需要将--ldflags-icuio标记为icu-config。

© www.soinside.com 2019 - 2024. All rights reserved.