web-dev-qa-db-fra.com

ld: référence non définie au symbole 'log2 @@ GLIBC_2.2.5'

Quel est le problème avec

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

On dirait que c'est en utilisant log2() mais qu'est-ce qui ne va pas? Je l'utilise en fait avec du code OpenMPI, mais commenter cette ligne corrige les choses.

Source complète ( http://pastie.org/7559178 ) voir ligne 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

On dirait que log2(4) fonctionnera mais je ne peux pas passer dans une variable?

20
Jiew Meng

Pour lier libm, vous devez ajouter -lm argument, comme ce document; MPI sous Linux dans le département de mathématiques dit:

Si votre code comprend des fonctions mathématiques (comme exp, cos, etc.), vous devez créer un lien vers la bibliothèque de mathématiques libm.so. Cela se fait, tout comme pour la compilation en série, en ajoutant -lm à la fin de votre commande de compilation, c'est-à-dire,

mpicc -o sample sample.c -lm

40
Shafik Yaghmour