неопределенная ссылка на `u_fopen_48 ' - PullRequest
2 голосов
/ 22 февраля 2012

Я новичок в 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;
}

Документ для этой функции здесь .Я использую ICU 4.8.1 (скомпилирован сам, шаг за шагом согласно readme.html;)), NetBeans с g ++ внизу.Если это помогло, вот что я вижу во время строительства:

"/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 Ответ

3 голосов
/ 22 февраля 2012

Вы, кажется, забыли связать библиотеку, которую использовали. Вы должны обратиться к Эта страница для получения инструкций.

При создании составных проектов компилятор не может просто легко найти все необходимые ссылки. Большинство библиотек представлены в виде общего объектного файла (.so) и без кода C, который будет скомпилирован вместе с остальной частью вашего проекта, предоставляя только заголовки для своих функций. Это позволяет компилятору создавать в коде «сокеты» для функций, в которые они должны быть помещены, но без указания компоновщику, откуда эти функции следует брать - процесс компоновки просто потерпит неудачу. Поэтому вы должны явно указать компоновщику, где искать символы, которые он будет искать, и это обычно делается с флагом -l, хотя может показаться, что библиотека ICU применила к нему несколько иной подход.

...