35

どうしたの

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)ですが、変数を渡すことはできませんか?

4

1 に答える 1

71

リンクするには、このドキュメントのように引数libmを追加する必要があります。数学部門の Linux での MPIは次のように述べています。-lm

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

mpicc -o サンプル sample.c -lm

于 2013-04-15T02:05:51.337 に答える