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

Anton Smirnov dev at antonsmirnov.name
Sun Sep 14 01:26:33 PDT 2014


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?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20140914/0077a644/attachment.html>


More information about the cfe-dev mailing list