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


11

Pergunta semelhante foi feita aqui, mas não foi respondida.

Eu tenho uma implementação de Levenberg-Marquardt(baixada de algum lugar) e estou tentando compilá-la, mas obtendo 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 foi adicionar algumas bandeiras (por exemplo, aqui e aqui ). Mas nenhum deles funcionou para mim.

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


Qual é a sua versão glibc?
Nixeagle 23/09/14

ldd --versiondeu (Ubuntu EGLIBC 2.19-0ubuntu6.3) 2.19.
Shashwat

Por favor inclua seu Makefile. Isso é claramente algo com dependências de biblioteca quebradas (e possíveis incompatibilidades de versão simples).
Nixeagle # 24/14

2
Tem certeza de que tentou adicionar -lm? Onde você adicionou?
muru

@Shashwat: Onde exatamente você adicionou isso? Você pode postar o código? Graças

Respostas:


8

Parece que o usuário que encontrou a solução nunca a 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

Assim, -lme -ldlna gcclinha que você está compilando e deve ir muito bem.

Como alternativa, na maioria dos casos, você também pode definir CFLAGSe aliviar explicitamente 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";

6

Eu adicionei -lmpara CMakeLists.txtonde as bibliotecas estão sendo atribuídas. Está funcionando agora.


4
Você pode mostrar a adição em detalhes? Obrigado
Lucio

3

Encontrei este tópico 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})
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.