[cfe-dev] can't link with libLLVMSupport.a

Anton Smirnov dev at antonsmirnov.name
Sun Sep 14 22:37:07 PDT 2014


Hi, James.

Thanks for suggestion.

I've modified compile/link cmd and added -fno-rtti (clang++ -c
./exe_interpreter.cpp -o ./exe_interpreter2.o -fno-rtti) but no luck.
How can i analyze produced object file to make sure it contains all
necessary information (rtti)?

Let me explain everything in brief.
I've copied lli tool source code and modified it a bit (renamed main())  to
produce static library instead of executable. I'm able to compile it and
link it so lib..a file. Then i'm trying to link it with LLVM libs and
unfortunately StringSaver class code is not found in libLLVMSupport.a
though i can see it contains according object file.

I can modify my lib and executable compile/link arguments as needed, so
please suggest me what can be done as i'm in stuck.

Regards, Anton.


2014-09-15 7:14 GMT+06:00 James Dennett <james.dennett at gmail.com>:

> You might try building your library with -fno-rtti, or clang without it.
>
> -- James
> On Sep 14, 2014 9:29 AM, "Anton Smirnov" <dev at antonsmirnov.name> wrote:
>
>> Hi.
>>
>> I'm trying to compile reduced clang "driver.cpp" - added printf for
>> arguments - and i'm getting linking with libLLVMSupport.a error - no
>> StringSaver class found.
>>
>> # lib
>> echo "compiling cmd builder (x86_64) ..."
>> clang++ `../llvm_34_local_installed2/bin/llvm-config --cxxflags` -I
>> ../llvm_34/tools/clang/include -I
>> ../llvm_34_build_local2/tools/clang/include  -c ./lib_cmd_builder.cpp -o
>> ./lib_cmd_builder_x86_64.o
>>
>> echo "linking cmd builder (x86_64) ..."
>> CMD="clang++ `../llvm_34_local_installed2/bin/llvm-config --ldflags`
>> ./lib_cmd_builder_x86_64.o -o exe_cmd_builder_x86_64
>> `../llvm_34_local_installed2/bin/llvm-config --libs` -lclangARCMigrate
>> -lclangAST -lclangASTMatchers -lclangAnalysis -lclangApplyReplacements
>> -lclangBasic -lclangCodeGen -lclangDriver -lclangDynamicASTMatchers
>> -lclangEdit -lclangFormat -lclangFrontend -lclangFrontendTool -lclangIndex
>> -lclangLex -lclangParse -lclangQuery -lclangRewriteCore
>> -lclangRewriteFrontend -lclangSema -lclangSerialization
>> -lclangStaticAnalyzerCheckers -lclangStaticAnalyzerCore
>> -lclangStaticAnalyzerFrontend -lclangTidy -lclangTidyGoogleModule
>> -lclangTidyLLVMModule"
>>
>> Error message:
>>
>> Undefined symbols for architecture x86_64:
>>
>>   "typeinfo for llvm::cl::StringSaver", referenced from:
>>
>>       typeinfo for (anonymous namespace)::StringSetSaver in
>> lib_cmd_builder_x86_64.o
>>
>> ld: symbol(s) not found for architecture x86_64
>>
>> clang: error: linker command failed with exit code 1 (use -v to see
>> invocation)
>>
>>
>> Checking libLLVM is found and contains CommandLine object data:
>>
>> (found on -L path):
>>
>> find ../llvm_34_local_installed2/lib/ -name "*upport*"
>>
>> ../llvm_34_local_installed2/lib//libLLVMSupport.a
>>
>>
>> (contains CommandLine.cpp object data):
>>
>> ar -t ../llvm_34_local_installed2/lib//libLLVMSupport.a | grep CommandLine
>>
>> CommandLine.cpp.o
>>
>>
>> The class StringSaver is declared  in CommandLine.cpp:
>>
>>
>>
>> /Users/asmirnov/Documents/dev/src/llvm_34/include/llvm/Support/CommandLine.h
>>
>> class StringSaver {
>>
>>   virtual void anchor();
>>
>> public:
>>
>>   virtual const char *SaveString(const char *Str) = 0;
>>
>>   virtual ~StringSaver() {};  // Pacify -Wnon-virtual-dtor.
>>
>> };
>>
>>
>> StringSaver inheritor is declared and implemented in self file
>> (lib_cmd_builder.cpp):
>>
>> namespace {
>>
>>   class StringSetSaver : public llvm::cl::StringSaver {
>>
>>   public:
>>
>>     StringSetSaver(std::set<std::string> &Storage) : Storage(Storage) {}
>>
>>     const char *SaveString(const char *Str) LLVM_OVERRIDE {
>>
>>       return SaveStringInSet(Storage, Str);
>>
>>     }
>>
>>   private:
>>
>>     std::set<std::string> &Storage;
>>
>>   };
>>
>> }
>>
>>
>> So i can't understand why i'm having this error.
>>
>> Any thoughts?
>>
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20140915/18085752/attachment.html>


More information about the cfe-dev mailing list