[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