Mikhail, Thanks. Problem with getName() is that it does not exist for too many types. For example when I have a QualType that I would like to get as a string, then the doxygen says there's a getAstString static function but in reality it is not there. There's also no getName() for QualType. Then there's the split() method but the object that comes out of it also has no tostring or something that emits an enum or something.
What I'm trying to do is create a tool which emits an xml of the ast. A bit like the one which was included. On Thu, Jul 14, 2016 at 03:38:41PM +0100, Mikhail Ramalho wrote: > In ESBMC [0], we use: > > -lclangTooling -lclangDriver -lclangFrontend -lclangParse > -lclangSerialization -lclangSema -lclangAnalysis -lclangEdit -lclangLex > -lclangAST -lclangBasic -lLLVMBitReader -lLLVMCore -lLLVMOption > -lLLVMMCParser -lLLVMMC -lLLVMSupport -lrt -ldl -lpthread -lz -lm > > For clang, we have to manually write the libs, but for llvm we simply use > llvm-config, you can check the scripts for clang's libs [1] and llvm [2]. > > ~ > > But as a suggestion, I would not rely on getNameAsString, as it is > deprecated for quite a while. Try changing to *getName().str()* and it > should work for any C declaration (I'm not completely sure about that, > though). For C++ declarations (specially constructors and destructors), I > use the following method: > > std::string clang_c_convertert::get_decl_name( > const clang::NamedDecl &decl) > { > if(const clang::IdentifierInfo *identifier = decl.getIdentifier()) > return identifier->getName().str(); > > std::string name; > llvm::raw_string_ostream rso(name); > decl.printName(rso); > return rso.str(); > } > > It shoudl work for any C or C++ declaration. > > Thank you, > > [0] https://github.com/esbmc/esbmc > [1] > https://github.com/esbmc/esbmc/blob/master/scripts/build-aux/m4/ax_clang.m4 > [2] > https://github.com/esbmc/esbmc/blob/master/scripts/build-aux/m4/ax_llvm.m4 > > > 2016-07-14 15:12 GMT+01:00 folkert via cfe-users <cfe-users@lists.llvm.org>: > > > Hi, > > > > What is the order of the clang libraries when linking? > > > > Currently I'm doing: > > > > clang++ -fno-rtti `llvm-config --cxxflags` \ > > iterate.cpp \ > > `llvm-config --ldflags --libs --system-libs` \ > > -I/usr/lib/llvm-3.8/include -ggdb3 -std=c++11 > > -I/usr/include/llvm-3.8/llvm/Support -L/usr/lib/llvm-3.8/lib/ > > -L/usr/lib/gcc/x86_64-linux-gnu/5/ -I/usr/include/c++/5/ > > -I/usr/include/x86_64-linux-gnu/c++/5/ -I/usr/lib/llvm-3.8/include/ \ > > -lclangTooling -lclangFrontend -lclangDriver -lclangSerialization > > -lclangParse -lclangSema -lclangAnalysis -lclangEdit -lclangAST -lclangLex > > -lclangBasic -lLLVM -ldl > > > > but this gives me: > > > > /tmp/iterate-66d196.o: In function `getNameAsString': > > /usr/lib/llvm-3.8/include/clang/AST/Decl.h:184: undefined reference to > > `clang::DeclarationName::getAsString() const' > > > > Thanks in advance. > > > > > > Folkert van Heusden > > > > -- > > ---------------------------------------------------------------------- > > Phone: +31-6-41278122, PGP-key: 1F28D8AE, www.vanheusden.com > > _______________________________________________ > > cfe-users mailing list > > cfe-users@lists.llvm.org > > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users > > > > > > -- > > Mikhail Ramalho. Folkert van Heusden -- MultiTail รจ uno flexible tool per seguire di logfiles e effettuazione di commissioni. Feltrare, provedere da colore, merge, 'diff-view', etc. http://www.vanheusden.com/multitail/ ---------------------------------------------------------------------- Phone: +31-6-41278122, PGP-key: 1F28D8AE, www.vanheusden.com _______________________________________________ cfe-users mailing list cfe-users@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users