проблемы с математическим компоновщиком в Ubuntu 11.10 - PullRequest
21 голосов
/ 19 октября 2011

После обновления Ubuntu с (10.11, 11.04 i dont know) до 11.10 появилась странная ошибка.

Я получаю undefined reference to 'sqrt' при использовании math.h и связи с -lm

Я скомпилирую с gcc -Wall -Werror -g -Iinclude/ -lm lib/matrix.c src/analyse.c -o bin/analyse.o оба исходных файла и использую math.h.

Этот код скомпилирован без проблем, и я не сильно изменился с момента обновления, но теперь он не будет работать.

У вас есть предложения, что я могу сделать, чтобы найти ошибку?

Извините, если этот вопрос задавался раньше; Есть много сообщений об ошибках математического компоновщика, и я не нашел подходящего

Ответы [ 5 ]

27 голосов
/ 19 октября 2011

Библиотека, которую вы используете, должна быть помещена после файлов, которые ее используют, когда вы используете ее из командной строки. Поэтому поместите -lm после ваших файлов C в командной строке.

Ссылка

17 голосов
/ 09 ноября 2011

решено , это не самая распространенная проблема -lm ! Я в такой же ситуации после обновления до (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

Вы действительно ДОЛЖНЫ поместить -lm swith после -o foo foo.c параметр

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

Так поменяйте свои флаги в Makefile! РЕБЯТА. Это довольно новый (и серьезный) ошибка!

9 голосов
/ 09 ноября 2011

Это проблема из-за активации по умолчанию флага gcc --as-needed в компоновщике

Больше информации здесь: http://www.gentoo.org/proj/en/qa/asneeded.xml

Простое исправление (сработало у меня по крайней мере):

Добавить -Wl,--no-as-needed к компоновщику

4 голосов
/ 15 ноября 2012

Я обнаружил ту же проблему после обновления Ubuntu до версии 11.10. Я использую Netbeans для разработки и решения проблемы, указав стандартную библиотеку «Математика» следующим образом:

Щелкните правой кнопкой мыши по проекту, выберите «Свойства», выберите «Линкер» в меню, нажмите «Библиотеки» и затем «Добавить стандартную библиотеку», выбрав «Математика».

При компиляции опция '-lm' ставится после всех остальных опций, и она работает. Вероятно, эта версия gcc соответствует определенной архитектуре и ожидает библиотек в конце строки компиляции команд.

Ура!

D.

2 голосов
/ 14 июня 2013
cc filename.c -lm

просто попробуйте .......... ☻

...