referência indefinida ao símbolo 'exp @@ GLIBC_2.2.5'

7

Uma pergunta semelhante foi feita aqui mas está sem resposta .

Eu tenho uma implementação de Levenberg-Marquardt (baixei de algum lugar) e estou tentando compilá-lo, mas recebendo o seguinte erro.

gauravloj@vertex:~/Documents/source_code/non-rigid_registration/Gauss_newton/levmar-2.6$ make
[ 87%] Built target levmar
Linking C executable lmdemo
/usr/bin/ld: CMakeFiles/lmdemo.dir/lmdemo.c.o: undefined reference to symbol 'exp@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libm.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[2]: *** [lmdemo] Error 1
make[1]: *** [CMakeFiles/lmdemo.dir/all] Error 2
make: *** [all] Error 2

Em muitos sites, a solução dada era adicionar alguns sinalizadores (por exemplo, aqui e aqui ). Mas nenhum deles funcionou para mim.

Aqui é o Makefile, aqui é o CMakeLists.txt e aqui é o CMakeCache.txt.

    
por Shashwat 23.09.2014 / 23:54

3 respostas

5

Eu adicionei -lm em CMakeLists.txt onde as bibliotecas estão sendo atribuídas. Está funcionando agora.

    
por Shashwat 25.09.2014 / 05:42
6

Parece que o usuário que encontrou a solução nunca compartilhou mais tarde. Para os caras que estão tentando encontrar a solução, basta adicionar a biblioteca de matemática explicitamente e também adicionar -ldl

Portanto, -lm e -ldl na linha gcc que você está compilando e deve funcionar bem.

Como alternativa, na maioria dos casos, você também pode definir explicitamente CFLAGS e aliviar o problema dessa maneira. Estas são apenas duas maneiras de resolver,

Exemplo:

user@compiler-shell$ EXPORT CFLAGS=" -g -O2 -lm -ldl -Wall -Wpointer-arith -finline-functions -ffast-math -funroll-all-loops";
    
por Chandan Maddanna 01.04.2016 / 02:19
2

Eu encontrei este segmento com um problema semelhante. Explicitamente, a solução é encontrar e alterar seu arquivo CMakeLists.txt:

TARGET_LINK_LIBRARIES(lmdemo ${LIBS})

para

TARGET_LINK_LIBRARIES(lmdemo -lm ${LIBS})
    
por hiddeninthewifi 21.05.2015 / 22:06