web-dev-qa-db-ja.com

ld:シンボル 'log2 @@ GLIBC_2.2.5'への未定義の参照

どうしたの

_for (level = 1; level <= log2((double)size); level++)
                         ^
_

log2()を使用しているようですが、何が問題なのでしょうか?実際にOpenMPIコードで使用していますが、この行をコメントすると問題が修正されます。

フルソースhttp://pastie.org/7559178行40を参照

_[jiewmeng@JM Assign3]$ mpicc -o cpi cpi.c && mpirun -np 16 cpi
/usr/bin/ld: /tmp/cca9x4he.o: undefined reference to symbol 'log2@@GLIBC_2.2.5'
/usr/bin/ld: note: 'log2@@GLIBC_2.2.5' is defined in DSO /usr/lib/libm.so.6 so try adding it to the linker command line
/usr/lib/libm.so.6: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status
_

log2(4)は機能するようですが、変数を渡すことはできませんか?

20
Jiew Meng

libmをリンクするには、このドキュメントのように-lm引数を追加する必要があります。 数学部のLinux環境でのMPI のコメント:

コードに数学関数(exp、cosなど)が含まれている場合は、数学ライブラリlibm.soにリンクする必要があります。これは、コンパイルコマンドの最後に-lmを追加することで、シリアルコンパイルの場合と同様に行われます。つまり、

mpicc -o sample sample.c -lm

40
Shafik Yaghmour