对'u_fopen_48'的未定义引用

时间:2012-02-22 19:43:56

标签: c++ c icu

我是c / c ++的新手,我想我有一些基本问题。编译时出现undefined reference to u_fopen_48'错误:

#include <unicode/ustdio.h>

int main(int argc, char** argv) {
    UFILE* ufile = u_fopen("/home/emstol/Desktop/utf8demo.txt", "r", NULL, "utf8");
    return 0;
}

此功能的文档是here。我正在使用ICU 4.8.1(根据readme.html自我编译,逐步编译;)),下面是带有g ++的NetBeans。如果它有助于这是我在建设期间看到的:

"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Entering directory `/home/emstol/NetBeansProjects/TextFairy1'
"/usr/bin/make"  -f nbproject/Makefile-Debug.mk dist/Debug/GNU-Linux-x86/textfairy1
make[2]: Entering directory `/home/emstol/NetBeansProjects/TextFairy1'
mkdir -p dist/Debug/GNU-Linux-x86
g++     -o dist/Debug/GNU-Linux-x86/textfairy1 build/Debug/GNU-Linux-x86/main.o  
build/Debug/GNU-Linux-x86/main.o: In function `main':
/home/emstol/NetBeansProjects/TextFairy1/main.cpp:4: undefined reference to `u_fopen_48'
collect2: ld returned 1 exit status
make[2]: *** [dist/Debug/GNU-Linux-x86/textfairy1] Error 1
make[2]: Leaving directory `/home/emstol/NetBeansProjects/TextFairy1'
make[1]: *** [.build-conf] Error 2
make[1]: Leaving directory `/home/emstol/NetBeansProjects/TextFairy1'
make: *** [.build-impl] Error 2

1 个答案:

答案 0 :(得分:3)

您似乎忘记了链接您使用的库。您应该参考This page获取相关说明。

在构建复合项目时,编译器不能轻易找到所有必需的引用。大多数库以共享对象文件(.so)的形式出现,并且没有C代码与项目的其余部分一起编译,而只为其功能提供标头。这允许编译器在代码中为要放入的函数创建“套接字”,但是没有告诉链接器应该从哪里获取这些函数 - 链接过程将简单地失败。 因此,您必须明确告诉链接器在哪里搜索它将要搜索的符号,这通常使用-l标志来完成,尽管看起来ICU库采用了一种不同的方法。 / p>