Неопределенная ссылка на математические функции при связывании с gcc

Я получаю сообщение об ошибке при использовании make для установки программы. Полный шаг с ошибкой с ошибкой выглядит следующим образом:

 gcc -g -O2 -fopenmp -L/usr/lib -lcfitsio -lm -o lenstool_tab e_nfwg.o lenstool_tab.o midpnt.o nrutil.o polint.o qromo.o read_bin.o lenstool_tab.o: In function `main': /usr/local/src/lenstool-6.8/table_src/lenstool_tab.c:73: undefined reference to `log' /usr/local/src/lenstool-6.8/table_src/lenstool_tab.c:73: undefined reference to `log' e_nfwg.o: In function `surfdens2': /usr/local/src/lenstool-6.8/table_src/e_nfwg.c:133: undefined reference to `pow' /usr/local/src/lenstool-6.8/table_src/e_nfwg.c:130: undefined reference to `sin' /usr/local/src/lenstool-6.8/table_src/e_nfwg.c:138: undefined reference to `pow' /usr/local/src/lenstool-6.8/table_src/e_nfwg.c:140: undefined reference to `sin' /usr/local/src/lenstool-6.8/table_src/e_nfwg.c:140: undefined reference to `pow' /usr/local/src/lenstool-6.8/table_src/e_nfwg.c:144: undefined reference to `sin' /usr/local/src/lenstool-6.8/table_src/e_nfwg.c:144: undefined reference to `pow' e_nfwg.o: In function `nfwg_kappa': /usr/local/src/lenstool-6.8/table_src/e_nfwg.c:63: undefined reference to `pow' e_nfwg.o: In function `scmass': /usr/local/src/lenstool-6.8/table_src/e_nfwg.c:165: undefined reference to `pow' collect2: error: ld returned 1 exit status make[1]: *** [lenstool_tab] Error 1 make[1]: Leaving directory `/usr/local/src/lenstool-6.8/table_src' make: *** [all-recursive] Error 1 

Таким образом, очевидно, что существует проблема с привязкой к математической библиотеке. Я проверил, что эти коды содержат #include<math.h> . Основная причина этой проблемы, как правило, связана с отсутствием -lm в команде компиляции, но, как вы видите, она появляется в приведенном выше. Я добавил -lm к различным частям файла makefile, который казался подходящим, но это не помогло. Я включу makefile здесь, если это поможет. Должен ли я модифицировать make-файл, чтобы исправить это? Я искал эту проблему в Интернете, но ответы, казалось, не рассматривались в make-файле. Я прочитал предложение в другом потоке, чтобы изменить config.status, чтобы включить -lm , но было неясно, где это сделать. Я уже установил эту программу на Mac без проблем, но теперь я использую Ubuntu 14, и я получаю эту ошибку. Любая помощь высоко ценится! Благодарю.

Связанные с ними библиотеки должны быть указаны после ссылки на них. Таким образом, вы измените команду на:

 gcc -g -O2 -fopenmp -L/usr/lib -o lenstool_tab e_nfwg.o lenstool_tab.o midpnt.o nrutil.o polint.o qromo.o read_bin.o lenstool_tab.o -lcfitsio -lm 

Это должно решить вашу проблему. Вы можете устранить проблему в своем Makefile, чтобы библиотеки были указаны позже.