LLVM-3.1 libLLVMSupport.a referência indefinida a 'dladdr'

2

Estou tentando compilar usando o pacote llvm-3.1. Estou executando 12.04 x64 (kernel 3.2.0-26) & amp; & amp; 12.10 (3.5.0-4) x64 backported llvm-3.1 do quantal, em seguida debian experimental.
Em seguida eu tentei 12.10 com o pacote nativo do ubuntu llvm-3.1; isso também falhou.

user@system:/tmp/llvm-test# make  
compiling cpp yacc file: decaf-llvm.y  
output file: decaf-llvm  
bison -b decaf-llvm -d decaf-llvm.y  
/bin/mv -f decaf-llvm.tab.c decaf-llvm.tab.cc  
flex -odecaf-llvm.lex.cc decaf-llvm.lex  
g++ -o ./decaf-llvm decaf-llvm.tab.cc decaf-llvm.lex.cc decaf-stdlib.c 'llvm-config --cppflags --ldflags --libs core jit native' -ly -ll  
/usr/lib/llvm-3.1/lib/libLLVMSupport.a(Signals.o): In function 'PrintStackTrace(void*)':
(.text+0x6c): undefined reference to 'dladdr'  
/usr/lib/llvm-3.1/lib/libLLVMSupport.a(Signals.o): In function 'PrintStackTrace(void*)':
(.text+0x18f): undefined reference to 'dladdr'  
collect2: error: ld returned 1 exit status  
make: *** [decaf-llvm] Error 1  

Eu sei que o código funciona como eu o executei em centos usando llvm-3.1-6.fc18(rpm)

O Google foi um pouco útil com isso:

"Em alguns sistemas, incluindo o Ubuntu 11.10, a ligação pode falhar com a mensagem que libLLVMSupport.a na função PrintStackTrace (void *) tem indefinido referência a dladdr. "
  

"A solução alternativa é compilar o LLVM com cmake especificando o seguinte   variável:   -DCMAKE_EXE_LINKER_FLAGS = -ldl "

link

Eu chequei duas vezes yddflags e tudo parece ok.

user@system:/llvm-config --ldflags
-L/usr/lib/llvm-3.1/lib  -lpthread -lffi -ldl -lm

Não estou certo do que fazer a seguir; alguma sugestão?

    
por user91387 19.09.2012 / 02:21

2 respostas

3

Eu perguntei (e respondi) uma pergunta semelhante no Stack Overflow . Adaptar minha resposta dessa pergunta para a sua:

A biblioteca que requer os símbolos é incluída por -lLLVMSupport , portanto -ldl deve vir depois de -lLLVMSupport . Veja Por que a ordem da opção '-l' no questão do gcc? no Stack Overflow. Você precisa mudar isso:

'llvm-config --cppflags --ldflags --libs core jit native'

Para isso:

'llvm-config --cppflags --libs core jit native' 'llvm-config --ldflags'

E o vinculador deve ser bem-sucedido. Deixe-me saber se você encontrar uma solução melhor para corrigir a ordem de --ldflags .

    
por Matthew 21.10.2012 / 01:23
-1
sudo apt-get install libx11-xcb-dev llvm-dev x11proto-gl-dev x11proto-dri2-dev libxext-dev libxdamage-dev libxfixes-dev libxcb-glx0 libxcb-glx0-dev libpng12-dev
    
por user98961 20.10.2012 / 04:44