c math linker problemy na Ubuntu 11.10

Jakiś dziwny błąd pojawił się po uaktualnieniu mojego Ubuntu z (10.11, 11.04 i dont know) do 11.10.

Dostaję undefined reference to 'sqrt' Podczas korzystania z matematyki.h i łączenie z -lm

Kompiluję z gcc -Wall -Werror -g -Iinclude/ -lm lib/matrix.c src/analyse.c -o bin/analyse.o oba pliki źródłowe używają i dołączają math.h.

Ten kod skompilowany bez problemów i nie zmieniłem wiele od aktualizacji, ale teraz nie będzie działać.

Czy masz jakieś sugestie co mogę zrobić, aby znaleźć błąd?

Przepraszam, jeśli to pytanie zostało zadane wcześniej; tam jest tak wiele postów o błędach linkera matematycznego i nie znalazłem pasującego

Author: dreamcrash, 0000-00-00

5 answers

Biblioteka, której używasz, musi być umieszczona po plikach, które jej używają, gdy używasz jej z linii poleceń. Umieść -lm on po plikach C w wierszu poleceń.

Odniesienie

 27
Author: user786653,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-09 18:27:12

Rozwiązany , to nie jest powszechny brakujący -LM problem! Jestem w tej samej sytuacji po aktualizacji do (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

Naprawdę musisz umieścić -LM swith po -o foo foo.C parametr

Output:
pidi@idefix:~/projekt1$ make
gcc -o b1 b1.c --std=c99 -g -pedantic -Wall -lm
pidi@idefix:~/projekt1$

Więc Zamień swoje flagi w Makefile! Chłopaki. To całkiem nowy (i poważny) błąd!

 17
Author: quido.speedy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-09 11:51:45

Jest to problem spowodowany domyślną aktywacją flagi gcc --as-needed w linkerze

Więcej informacji tutaj: http://www.gentoo.org/proj/en/qa/asneeded.xml

Prosty fix (zadziałał przynajmniej dla mnie):

Dodaj -Wl,--no-as-needed do linkera

 9
Author: Seldon_SL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-09 15:06:35

Znalazłem ten sam problem po aktualizacji Ubuntu do wersji 11.10. Używam Netbeans do rozwijania i rozwiązywania problemu, określając standardową bibliotekę "Mathematics" w następujący sposób:

Kliknij prawym przyciskiem myszy na projekcie, kliknij na właściwości, wybierz "Linker" w menu, kliknij na "Libraries", a następnie "Add Standard Library" wybierając "Mathematics".

Podczas kompilacji opcja '- lm' jest umieszczana po wszystkich innych opcjach i działa. Prawdopodobnie ta wersja gcc podąża za specyficznym architektury i oczekuje bibliotek na końcu wiersza kompilacji poleceń.

Zdrówko!

D.

 3
Author: Diego,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-15 15:26:59
cc filename.c -lm
Po prostu spróbuj..........☻
 2
Author: user2485132,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-14 08:07:02