web-dev-qa-db-ja.com

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 here を含めています。これを修正するためにメイクファイルを変更する必要がありますか?この問題をWebで検索しましたが、メイクファイルを考慮した回答はなかったようです。別のスレッドでconfig.statusを変更して-lmを含めるという提案を読みましたが、それをどこで行うかが明確ではありませんでした。以前は問題なくこのプログラムをMacにインストールしましたが、現在Ubuntu 14を使用しているため、このエラーが発生します。どんな助けでも大歓迎です!ありがとう。

1
relo

リンク先のライブラリを指定する必要がありますそれらへの参照があります。したがって、コマンドを次のように変更します。

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の問題を修正できる可能性があります。

4
unxnut