Sto tentando di utilizzare la libreria libtommath. Sto usando l'IDE NetBeans per il mio progetto su Ubuntu Linux. Ho scaricato e compilato la libreria, ho fatto un 'make install' per inserire il file .a risultante in/usr/lib/e i file .h in/usr/includeTentativo di includere una libreria, ma continuo a ricevere "riferimento non definito" ai messaggi
Sembra trovare i file appropriatamente (dal momento che non ho più ricevuto quegli errori, cosa che ho fatto prima di installare nelle directory/usr).
Tuttavia, quando creo un semplice principale di effettuare una chiamata a mp_init (che si trova nella libreria), ottengo il seguente errore quando tento di fare il mio progetto:
mkdir -p build/Debug/GNU-Linux-x86
rm -f build/Debug/GNU-Linux-x86/main.o.d
gcc -c -g -MMD -MP -MF build/Debug/GNU-Linux-x86/main.o.d -o build/Debug/GNU-Linux-x86/main.o main.c
mkdir -p dist/Debug/GNU-Linux-x86
gcc -o dist/Debug/GNU-Linux-x86/cproj1 build/Debug/GNU-Linux-x86/main.o
build/Debug/GNU-Linux-x86/main.o: In function 'main':
/home/[[myusername]]/NetBeansProjects/CProj1/main.c:18: undefined reference to `mp_init'
collect2: ld returned 1 exit status
make[2]: *** [dist/Debug/GNU-Linux-x86/cproj1] Error 1
Così, sembra che il linker non riesce a trovare la funzione all'interno della libreria, tuttavia è lì, quindi non so cosa potrebbe causare questo.
Ho lo stesso errore se digito il comando gcc direttamente e salta il makefile, ho anche assicurato che la libreria statica sia stata compilata anche con gcc.
A cura di aggiungere:
ottengo gli stessi errori se lo faccio direttamente la compilazione e aggiungere biblioteca -l o -L:
$ gcc -l /usr/lib/libtommath.a main.c
/usr/bin/ld: cannot find -l/usr/lib/libtommath.a
collect2: ld returned 1 exit status
$ gcc -llibtommath.a main.c
/usr/bin/ld: cannot find -llibtommath.a
collect2: ld returned 1 exit status
$ gcc -Llibtommath.a main.c
/tmp/ccOxzclw.o: In function `main':
main.c:(.text+0x18): undefined reference to `mp_init'
collect2: ld returned 1 exit status
$ gcc -Llibtommath.a main.c
/tmp/ccOxzclw.o: In function `main':
main.c:(.text+0x18): undefined reference to `mp_init'
collect2: ld returned 1 exit status
Sono molto arrugginito su questa roba, così Non sono sicuro che sto usando il comando giusto qui, negli esempi -L sono state trovate le librerie? Se la biblioteca non viene trovata, come faccio a trovarla? È in/usr/lib, l'ho provato con il file .a nella directory corrente, ecc. Esiste una variabile d'ambiente che devo impostare? Se sì, come, ecc.
Ho provato una libreria completamente diversa (GMP) e ho avuto lo stesso problema. Questo deve essere una sorta di problema con l'ambiente di Ubuntu? Qualcuno ha qualche idea su come risolvere questo problema?
+1 Oh, grazie! So che l'ordine di risoluzione dei link ha perfettamente senso, ma aiuta davvero a ricordare questi fatti! – scraimer
Questo ha funzionato per me. Il mio vecchio makefile funzionava, ma ora sembra che il compilatore stia diventando troppo intelligente per il suo bene :) –
Grazie, questo era un grande promemoria! –