Hi, I am trying to use some LLVM API in my C++ code, and I end up getting linker errors. I am working on Apple MacOSX Lion. Using g++ for the compile. It is the CreateGlobalStringPtr which is throwing the error. This is LLVM 3.0. Here's the codeI am trying to use some LLVM API in my C++ code, and I end up getting linker errors. I am working on Apple MacOSX Lion. Using g++ for the compile. It is the CreateGlobalStringPtr which is throwing the error. This is LLVM 3.0. Here's the code: #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"); } And here's the error: 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 ccFB7xjg.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 ccFB7xjg.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 ccFB7xjg.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 ccFB7xjg.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 ccFB7xjg.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&)inccFB7xjg.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&)inccFB7xjg.o ld: symbol(s) not found for architecture x86_64 -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120122/978e0326/attachment.html>
Dmitry N. Mikushin
2012-Jan-22 17:56 UTC
[LLVMdev] CreateGlobalStringPtr giving linker errors
Probably your g++ compiles x86_64 binary by default, but i686 dylib is supplied? Try: g++ -m32 e.cpp /Developer/Platforms/iPhoneOS.platform/Developer/usr/llvm-gcc-4.2/libexec/gcc/i686-apple-darwin10/4.2.1/libllvmgcc.dylib - D. 2012/1/22 Arpan Sen <arpansen at gmail.com>:> Hi, > > I am trying to use some LLVM API in my C++ code, and I end up getting linker > errors. I am working on Apple MacOSX Lion. Using g++ for the compile. It is > the CreateGlobalStringPtr which is throwing the error. This is LLVM 3.0. > > Here's the codeI am trying to use some LLVM API in my C++ code, and I end up > getting linker errors. I am working on Apple MacOSX Lion. Using g++ for the > compile. It is the CreateGlobalStringPtr which is throwing the error. This > is LLVM 3.0. > > Here's the code: > > #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"); > } > > And here's the error: > > 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 ccFB7xjg.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 ccFB7xjg.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 ccFB7xjg.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 ccFB7xjg.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 ccFB7xjg.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 ccFB7xjg.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 ccFB7xjg.o > ld: symbol(s) not found for architecture x86_64 > > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >
Hi All, I was able to resolve the compile errors using llvm-config --cxxflags --ldflags --libs and then applying the same to g++ command line. Arpan On Sun, Jan 22, 2012 at 11:26 PM, Dmitry N. Mikushin <maemarcus at gmail.com>wrote:> Probably your g++ compiles x86_64 binary by default, but i686 dylib is > supplied? > > Try: > > g++ -m32 e.cpp > /Developer/Platforms/iPhoneOS.platform/Developer/usr/llvm-gcc-4.2/libexec/gcc/i686-apple-darwin10/4.2.1/libllvmgcc.dylib > > - D. > > 2012/1/22 Arpan Sen <arpansen at gmail.com>: > > Hi, > > > > I am trying to use some LLVM API in my C++ code, and I end up getting > linker > > errors. I am working on Apple MacOSX Lion. Using g++ for the compile. It > is > > the CreateGlobalStringPtr which is throwing the error. This is LLVM 3.0. > > > > Here's the codeI am trying to use some LLVM API in my C++ code, and I > end up > > getting linker errors. I am working on Apple MacOSX Lion. Using g++ for > the > > compile. It is the CreateGlobalStringPtr which is throwing the error. > This > > is LLVM 3.0. > > > > Here's the code: > > > > #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"); > > } > > > > And here's the error: > > > > 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 ccFB7xjg.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 ccFB7xjg.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 ccFB7xjg.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 ccFB7xjg.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 ccFB7xjg.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 ccFB7xjg.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 ccFB7xjg.o > > ld: symbol(s) not found for architecture x86_64 > > > > > > _______________________________________________ > > LLVM Developers mailing list > > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > > >-- Regards, Arpan ----------------------------------------------------------------------------------------------------------------- Reality is merely an illusion, albeit a very persistent one. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120123/527dd3ba/attachment.html>
Seemingly Similar Threads
- [LLVMdev] CreateGlobalStringPtr giving linker errors
- [LLVMdev] Code crashing in CreateGlobalStringPtr, passes when I add code for main routine + entry
- [LLVMdev] Passing ConstantDataArray to GetElementPtrInst
- single-threaded code-gen and how to make it support multi-thread
- single-threaded code-gen and how to make it support multi-thread