ubuntu下使用llvm库出现未定义引用错误

YenvY 发布于 2013/09/30 12:49
阅读 1K+
收藏 0

我在Ubuntu(13.04)下通过svn手动编译安装了 llvm (3.2,svn版本191651)。makefile配置为

--enable-optimized --enable-jit --prefix=/usr/local/LLVM

编译安装后为了检验安装是否成功采用下面博文

http://www.ibm.com/developerworks/cn/opensource/os-createcompilerllvm1/

给出的简化例子进行编译,具体代码如下

///ll.cc
#include "llvm/LLVMContext.h"
#include "llvm/Module.h"
#include "llvm/Support/IRBuilder.h"

int main()
{
  llvm::LLVMContext& context = llvm::getGlobalContext();
  llvm::Module* module = new llvm::Module("top", context);
  llvm::IRBuilder<> builder(context); 

  module->dump( );
}
然后编译:

     g++(clang++) `llvm-config --cxxflags --ldflags --libs` ll.cc

clang和gcc都会报告错误:

ll.cc:(.text.startup+0x6):对‘llvm::getGlobalContext()’未定义的引用
ll.cc:(.text.startup+0x3b):对‘llvm::Module::Module(llvm::StringRef, llvm::LLVMContext&)’未定义的引用
collect2: 错误: ld 返回 1

两个编译器对IRBuilder都没有问题

如果把`llvm-config`参数放到最后

g++(clang++) ll.cc `llvm-config --libs --ldflags --cxxflags`

则clang++能通过编译,g++报告大量错误,列出前三行

/usr/local/LLVM/lib/libLLVMSupport.a(Signals.o):在函数‘llvm::sys::PrintStackTrace(_IO_FILE*)’中:
Signals.cpp:(.text+0x83d):对‘dladdr’未定义的引用
Signals.cpp:(.text+0x957):对‘dladdr’未定义的引用

在stackoverflow上提问有人回答说是lib引用顺序到问题,但是参数顺序应该不会影响才对吧。环境变量设置均正常。上述问题在以前安装之后并未出现,请问是否是配置和安装有什么遗漏或错误?



加载中
0
gnefil.nil
gnefil.nil
顺序有影响的,llvm各个版本间有差异的,llvm-config 放到最后,它的输出好像有换行,--libs后面加点参数吧,llvm-config --ldflags独立放到最后吧
返回顶部
顶部