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,您需要添加-lm参数,如本文档;数学系Linux下的MPI说:

如果您的代码包含数学函数(如 exp、cos 等),则需要链接到数学库 libm.so。就像串行编译一样,这是通过在编译命令的末尾添加 -lm 来完成的,也就是说,

mpicc -o 示例 sample.c -lm

于 2013-04-15T02:05:51.337 回答