Ld: undefined ссылка на символ 'log2 @@GLIBC_2.2.5'

Что случилось с

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

Похоже на использование log2(), но что не так? Я использую его с кодом OpenMPI на самом деле, но комментируя эту строку, она исправляет все.

Полный исходный код (http://pastie.org/7559178) см. строку 40

[[email protected] Assign3]$ mpicc -o cpi cpi.c && mpirun -np 16 cpi
/usr/bin/ld: /tmp/cca9x4he.o: undefined reference to symbol '[email protected]@GLIBC_2.2.5'
/usr/bin/ld: note: '[email protected]@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

In, чтобы связать libm, вам нужно добавить аргумент -lm, как этот документ; MPI под Linux в Math Department говорит:

Если ваш код включает в себя математические функции (например, exp, cos и т.д.), вам нужно связать с библиотекой математики libm.so. Готово, как и для последовательного компиляции, добавив -lm в конец вашего компилировать команду, то есть

mpicc -o sample sample.c -lm