C проблемы с математическим компоновщиком на Ubuntu 11.10

Некоторая странная ошибка появилась после обновления моего 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.

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

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

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

Ответ 1

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

Ссылка

Ответ 2

SOLVED, это не общая проблема отсутствия -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:
[email protected]:~/projekt1$ make
gcc -o b1 b1.c --std=c99 -g -pedantic -Wall -lm
[email protected]:~/projekt1$

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

Ответ 3

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

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

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

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

Ответ 4

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

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

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

Ура!

Д.

Ответ 5

cc filename.c -lm

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