LLVM-3.1 libLLVMSupport.a 对“dladdr”的未定义引用

LLVM-3.1 libLLVMSupport.a 对“dladdr”的未定义引用

我正在尝试使用 llvm-3.1 包进行编译。我运行的是 12.04 x64 (3.2.0-26 内核) && 12.10 (3.5.0-4) x64 从 quantal 反向移植的 llvm-3.1,然后是 debian 实验版。
接下来我尝试使用原生 ubuntu llvm-3.1 包的 12.10;这也失败了。

用户@系统:/tmp/llvm-test# make  
编译 cpp yacc 文件:decaf-llvm.y  
输出文件: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): 在函数“PrintStackTrace(void*)”中:
(.text+0x6c): 对‘dladdr’未定义引用  
/usr/lib/llvm-3.1/lib/libLLVMSupport.a(Signals.o): 在函数“PrintStackTrace(void*)”中:
(.text+0x18f): 对‘dladdr’未定义引用  
collect2:错误:ld 返回 1 退出状态  
make:*** [decaf-llvm] 错误 1  

我知道代码可以工作,因为我已经在 centos 中很好地运行它llvm-3.1-6.fc18(rpm)

谷歌对此提供了一些帮助:

“在某些系统上,包括 Ubuntu 11.10,链接可能会失败,并显示消息称函数 PrintStackTrace(void*) 中的 libLLVMSupport.a 对 dladdr 的引用未定义。”

“解决方法是使用 cmake 编译 LLVM 并指定以下变量:-DCMAKE_EXE_LINKER_FLAGS=-ldl”

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

我仔细检查了 y ldflags 并且一切似乎正常。

用户@系统:/llvm-config --ldflags
-L/usr/lib/llvm-3.1/lib -lpthread-lffi-ldl-lm

我不清楚下一步该做什么;有什么建议吗?

答案1

我问过(并回答过)类似的问题在 Stack Overflow 上. 我对这个问题的回答适用于您的问题:

需要符号的库包含在 中-lLLVMSupport,因此-ldl必须位于 之后-lLLVMSupport。请参阅为什么 gcc 中 '-l' 选项的顺序很重要?在 Stack Overflow 上。您需要更改此设置:

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

对此:

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

并且链接器应该会成功。如果您找到更好的解决方案来修复 的顺序--ldflags,请告诉我。

答案2

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

相关内容