LLVM-3.1 libLLVMSupport.a неопределенная ссылка на 'dladdr'

Я пытаюсь скомпилировать использование llvm-3.1 пакета. Я выполняю 12,04 x64 (3.2.0-26 ядра) && 12.10 (3.5.0-4), x64 бэкпортировал llvm-3.1 от quantal, затем debian экспериментальный.
Затем я попробовал 12.10 собственным пакетом человечности llvm-3.1; это перестало работать также.

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  

Я знаю работы кода, поскольку я выполнил его в песнях прекрасное использование llvm-3.1-6.fc18(rpm)

Google был немного полезен с этим:

"В некоторых системах, incluning Ubuntu 11.10, соединение может перестать работать с сообщением, что libLLVMSupport.a в функциональном PrintStackTrace (пусто*) имеет неопределенную ссылку на dladdr".

"Обходное решение должно скомпилировать LLVM с cmake определение следующей переменной:-DCMAKE_EXE_LINKER_FLAGS =-ldl"

http://svn.dsource.org/projects/bindings/trunk/llvm-3.0/Readme

Я проверил y дважды ldflags, и все кажется хорошо.

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

Я неясен из того, что сделать затем; какие-либо предложения?

2
задан 27 September 2012 в 16:18

2 ответа

Я задал (и ответил) похожий вопрос о переполнении стека . Приспосабливая мой ответ на этот вопрос к вашему:

Библиотека, требующая символы, включена в -lLLVMSupport, поэтому -ldl должна следовать после -lLLVMSupport. См. Почему порядок опции -l в gcc имеет значение? в Переполнении стека. Вам нужно изменить это:

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

На это:

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

И компоновщик должен быть успешным. Дайте мне знать, если вы найдете лучшее решение для исправления порядка --ldflags.

0
ответ дан 27 September 2012 в 16:18
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
0
ответ дан 27 September 2012 в 16:18

Другие вопросы по тегам:

Похожие вопросы: