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

James Dennett james.dennett at gmail.com
Sun Sep 14 18:14:42 PDT 2014


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/20140914/b7c81289/attachment.html>


More information about the cfe-dev mailing list