c problemi di linker matematici su Ubuntu 11.10

Qualche errore strano è apparso dopo aver aggiornato la mia Ubuntu da (10.11, 11.04 i dont know) a 11.10.

Ricevo un undefined reference to 'sqrt' mentre utilizzo math.h e il collegamento con -lm

Sto compilando gcc -Wall -Werror -g -Iinclude/ -lm lib/matrix.c src/analyse.c -o bin/analyse.o entrambi i file sorgente usano e includono math.h.

Questo codice è stato compilato senza problemi e non è cambiato molto dopo l’aggiornamento, ma ora non funzionerà.

Hai qualche suggerimento su cosa posso fare, per trovare l’errore?

Mi dispiace, se questa domanda è stata posta prima; ci sono così tanti post sugli errori di linker matematici e non ne ho trovato uno corrispondente

La libreria che si sta utilizzando deve essere posizionata dopo i file che la utilizzano quando la si utilizza dalla riga di comando. Quindi posiziona -lm on dopo i tuoi file C sulla riga di comando.

Riferimento

RISOLTO , questo non è il problema comune mancante -lm ! Sono nella stessa situazione dopo l’aggiornamento a (k) ubuntu 11.10!

 $ whereis math.h math: /usr/include/math.h Makefile: CC=gcc CFLAGS=--std=c99 -g -pedantic -Wall -lm uname: Linux idefix 3.0.0-12-generic #20-Ubuntu SMP Fri Oct 7 14:56:25 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux 

Devi davvero posizionare il parametro -lm swith dopo -o foo foo.c

 Output: [email protected]:~/projekt1$ make gcc -o b1 b1.c --std=c99 -g -pedantic -Wall -lm [email protected]:~/projekt1$ 

Quindi scambia le tue bandiere in Makefile! RAGAZZI. Questo è abbastanza nuovo (e serio) BUG!

Questo è un problema dovuto all’triggerszione predefinita del flag gcc --as-needed nel linker

Maggiori informazioni qui: http://www.gentoo.org/proj/en/qa/asneeded.xml

Correzione semplice (almeno per me ha funzionato):

Aggiungi -Wl,--no-as-needed al linker

Ho trovato lo stesso problema dopo aver aggiornato la mia versione di Ubuntu alla 11.10. Uso Netbeans per sviluppare e risolvere il problema specificando la libreria standard “Matematica” come segue:

Fare clic con il tasto destro del mouse sul progetto, fare clic su Proprietà, selezionare “Linker” nel menu, fare clic su “Librerie” e quindi su “Aggiungi libreria standard” selezionando “Matematica”.

Quando si compila l’opzione ‘-lm’ è posta dopo tutte le altre opzioni e funziona. Probabilmente questa versione di gcc segue un’architettura specifica e si aspetta che le librerie siano alla fine della linea di compilazione dei comandi.

Saluti!

D.

 cc filename.c -lm 

prova ………. ☻