2013-04-15 22 views
12

cosa è sbagliato conld: undefined reference to simbolo 'log2 @@ GLIBC_2.2.5'

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

Sembra come il suo usare log2() ma che cosa è sbagliato? Lo sto usando con il codice OpenMPI, ma commentare questa riga risolve le cose.

Full Source (http://pastie.org/7559178) vedi linea 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 

Sembra come log2(4) funzionerà ma non posso passare in una variabile?

risposta

27

Al fine di collegare libm è necessario aggiungere l'argomento -lm, come questo documento; MPI under Linux in the Math Department dice:

Se il codice include funzioni matematiche (come exp, cos, ecc), è necessario collegare alla matematica libm.so. libreria Questo viene fatto, proprio come per la compilazione di serie, con l'aggiunta di -lm alla fine del vostro comando compilazione, cioè, campione

mpicc -o sample.c -lm

+0

Grazie, ho risolto quello –

Problemi correlati