2012-01-22 8 views
0

C++コードでLLVM APIを使用しようとしていますが、リンカエラーが発生します。私はApple MacOSX Lionに取り組んでいます。コンパイルにg ++を使用する。これは、エラーをスローしているCreateGlobalStringPtrです。これはLLVM 3.0です。ここでLLVMライブラリをリンクしようとするとコンパイルエラーが発生する

はコードです:

#define __STDC_LIMIT_MACROS 
#define __STDC_CONSTANT_MACROS 

#include "llvm/Support/DataTypes.h" 
#include "llvm/Support/IRBuilder.h" 
#include "llvm/LLVMContext.h" 
#include "llvm/Module.h" 
#include "llvm/Constants.h" 
#include "llvm/Function.h" 
#include "llvm/BasicBlock.h" 
int main() 
{ 
    llvm::LLVMContext & context = llvm::getGlobalContext(); 
    llvm::Module *module = new llvm::Module("top", context); 
    llvm::IRBuilder<> builder(context); 
    llvm::Value *helloWorld = builder.CreateGlobalStringPtr("hello world!\n"); 
} 

g++ e.cpp /Developer/Platforms/iPhoneOS.platform/Developer/usr/llvm-gcc-4.2/libexec/gcc/i686-apple-darwin10/4.2.1/libllvmgcc.dylib 
Undefined symbols for architecture x86_64: 
    "llvm::ConstantExpr::getGetElementPtr(llvm::Constant*, llvm::ArrayRef<llvm::Value*>, bool)", referenced from: 
     llvm::ConstantExpr::getInBoundsGetElementPtr(llvm::Constant*, llvm::ArrayRef<llvm::Value*>)in ccQDtIAW.o 
    "llvm::GetElementPtrInst::getIndexedType(llvm::Type*, llvm::ArrayRef<llvm::Value*>)", referenced from: 
     llvm::GetElementPtrInst::GetElementPtrInst(llvm::Value*, llvm::ArrayRef<llvm::Value*>, unsigned int, llvm::Twine const&, llvm::Instruction*)in ccQDtIAW.o 
    "llvm::PointerType::get(llvm::Type*, unsigned int)", referenced from: 
     llvm::GetElementPtrInst::GetElementPtrInst(llvm::Value*, llvm::ArrayRef<llvm::Value*>, unsigned int, llvm::Twine const&, llvm::Instruction*)in ccQDtIAW.o 
    "llvm::Instruction::Instruction(llvm::Type*, unsigned int, llvm::Use*, unsigned int, llvm::Instruction*)", referenced from: 
     llvm::GetElementPtrInst::GetElementPtrInst(llvm::Value*, llvm::ArrayRef<llvm::Value*>, unsigned int, llvm::Twine const&, llvm::Instruction*)in ccQDtIAW.o 
    "llvm::GetElementPtrInst::init(llvm::Value*, llvm::ArrayRef<llvm::Value*>, llvm::Twine const&)", referenced from: 
     llvm::GetElementPtrInst::GetElementPtrInst(llvm::Value*, llvm::ArrayRef<llvm::Value*>, unsigned int, llvm::Twine const&, llvm::Instruction*)in ccQDtIAW.o 
    "llvm::IRBuilderBase::CreateGlobalString(llvm::StringRef, llvm::Twine const&)", referenced from: 
     llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateGlobalStringPtr(llvm::StringRef, llvm::Twine const&)in ccQDtIAW.o 
    "llvm::ConstantInt::get(llvm::IntegerType*, unsigned long long, bool)", referenced from: 
     llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateGlobalStringPtr(llvm::StringRef, llvm::Twine const&)in ccQDtIAW.o 
ld: symbol(s) not found for architecture x86_64 

答えて

2

あなたは(それがLLVM-GCCとの最後のリリースだったので、間違いなく、周りのLLVM 2.9から生成される)いくつかのランダムは.dylibにリンクしているのはなぜ? llvm-configを使用すると、コンパイラ/リンカの適切なフラグが導出されます。

関連する問題