ld:对符号'log2 @@ GLIBC_2.2.5'的未定义引用

时间:2013-04-15 00:58:49

标签: c mpi linker-errors

出了什么问题
for (level = 1; level <= log2((double)size); level++)
                         ^

似乎使用log2(),但有什么不对?我实际上正在使用它与OpenMPI代码,但注释这一行修复了一些事情。

Full Sourcehttp://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)会起作用,但我无法传递变量?

1 个答案:

答案 0 :(得分:38)

为了链接libm,您需要添加-lm参数,作为此文档; MPI under Linux in the Math Department说:

  

如果您的代码包含数学函数(如exp,cos等),   你需要链接到数学库libm.so.这个完成了,   就像串行编译一样,通过在你的结尾添加-lm   编译命令,即

     

mpicc -o sample sample.c -lm