Issue with installation of Clang

Hi,

I am new to LLVM and Clang. I am trying to set up Clang on my system. I
am currently running it on Ubuntu 10.04 which is loaded on a VM.

After Installation I tried running a small code to check if it works

this is my code

#include <iostream>

#include <llvm/Support/raw_ostream.h>

#include <clang/Basic/Diagnostic.h>
#include <clang/Basic/TargetInfo.h>
#include <clang/Basic/FileManager.h>
#include <clang/Lex/Preprocessor.h>
#include <clang/Lex/HeaderSearch.h>
#include <clang/Frontend/TextDiagnosticPrinter.h>
#include <clang/Frontend/DiagnosticOptions.h>

using namespace clang;

int main()
{
     llvm::raw_stdout_ostream ost;

     DiagnosticOptions dops;
     TextDiagnosticPrinter tdp(ost,dops);

     return 0;
}

when I run this bit of code using
g++ tut1.cpp -g -fno-rtti `llvm-config --cxxflags --ldflags --libs`
-L/usr/local/lib -lclangBasic -lclangLex -lclangDriver -lclangFrontend
-lclangParse -lclangAST -lclangSema -lclangAnalysis

this is the output that I get

fla@ubuntu:~/Desktop/Clang$ g++ tut1.cpp -g -fno-rtti `llvm-config
--cxxflags --ldflags --libs` -L/usr/local/lib -lclangBasic -lclangLex
-lclangDriver -lclangFrontend -lclangParse -lclangAST -lclangSema
-lclangAnalysis
/usr/local/lib/libclangFrontend.a(TextDiagnosticPrinter.o): In function
`~TextDiagnosticPrinter':
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:53:
undefined reference to `clang::DiagnosticClient::~DiagnosticClient()'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:53:
undefined reference to `clang::DiagnosticClient::~DiagnosticClient()'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:53:
undefined reference to `clang::DiagnosticClient::~DiagnosticClient()'
/usr/local/lib/libclangFrontend.a(TextDiagnosticPrinter.o): In function
`clang::TextDiagnosticPrinter::PrintIncludeStack(clang::SourceLocation,
clang::SourceManager const&)':
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:59:
undefined reference to
`clang::SourceManager::getPresumedLoc(clang::SourceLocation) const'
/usr/local/lib/libclangFrontend.a(TextDiagnosticPrinter.o): In function
`clang::TextDiagnosticPrinter::HighlightRange(clang::CharSourceRange
const&, clang::SourceManager const&, unsigned int, clang::FileID,
std::basic_string<char, std::char_traits<char>, std::allocator<char> >&,
std::basic_string<char, std::char_traits<char>, std::allocator<char> >
const&)':
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:91:
undefined reference to
`clang::SourceManager::getInstantiationRange(clang::SourceLocation) const'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:93:
undefined reference to
`clang::SourceManager::getInstantiationLineNumber(clang::SourceLocation,
bool*) const'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:97:
undefined reference to
`clang::SourceManager::getInstantiationLineNumber(clang::SourceLocation,
bool*) const'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:104:
undefined reference to
`clang::SourceManager::getInstantiationColumnNumber(clang::SourceLocation,
bool*) const'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:111:
undefined reference to
`clang::SourceManager::getInstantiationColumnNumber(clang::SourceLocation,
bool*) const'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:118:
undefined reference to
`clang::Lexer::MeasureTokenLength(clang::SourceLocation,
clang::SourceManager const&, clang::LangOptions const&)'
/usr/local/lib/libclangFrontend.a(TextDiagnosticPrinter.o): In function
`clang::TextDiagnosticPrinter::EmitCaretDiagnostic(clang::SourceLocation, clang::CharSourceRange*,
unsigned int, clang::SourceManager const&, clang::FixItHint const*,
unsigned int, unsigned int, unsigned int, unsigned int, unsigned int)':
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:310:
undefined reference to
`clang::SourceManager::getImmediateInstantiationRange(clang::SourceLocation)
const'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:316:
undefined reference to
`clang::SourceManager::getImmediateSpellingLoc(clang::SourceLocation) const'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:323:
undefined reference to
`clang::SourceManager::getImmediateSpellingLoc(clang::SourceLocation) const'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:325:
undefined reference to
`clang::SourceManager::getImmediateSpellingLoc(clang::SourceLocation) const'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:330:
undefined reference to
`clang::SourceManager::getPresumedLoc(clang::SourceLocation) const'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:370:
undefined reference to
`clang::SourceManager::getBufferData(clang::FileID, bool*) const'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:374:
undefined reference to
`clang::SourceManager::getColumnNumber(clang::FileID, unsigned int,
bool*) const'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:376:
undefined reference to
`clang::Lexer::MeasureTokenLength(clang::SourceLocation,
clang::SourceManager const&, clang::LangOptions const&)'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:403:
undefined reference to
`clang::SourceManager::getLineNumber(clang::FileID, unsigned int, bool*)
const'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:455:
undefined reference to
`clang::SourceManager::getLineNumber(clang::FileID, unsigned int, bool*)
const'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:455:
undefined reference to
`clang::SourceManager::getLineNumber(clang::FileID, unsigned int, bool*)
const'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:460:
undefined reference to
`clang::SourceManager::getColumnNumber(clang::FileID, unsigned int,
bool*) const'
/usr/local/lib/libclangFrontend.a(TextDiagnosticPrinter.o): In function
`clang::TextDiagnosticPrinter::HandleDiagnostic(clang::Diagnostic::Level, clang::DiagnosticInfo
const&)':
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:730:
undefined reference to
`clang::SourceManager::getPresumedLoc(clang::SourceLocation) const'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:776:
undefined reference to
`clang::SourceManager::getInstantiationRange(clang::SourceLocation) const'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:789:
undefined reference to
`clang::Lexer::MeasureTokenLength(clang::SourceLocation,
clang::SourceManager const&, clang::LangOptions const&)'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:794:
undefined reference to
`clang::SourceManager::getColumnNumber(clang::FileID, unsigned int,
bool*) const'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:794:
undefined reference to
`clang::SourceManager::getLineNumber(clang::FileID, unsigned int, bool*)
const'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:794:
undefined reference to
`clang::SourceManager::getColumnNumber(clang::FileID, unsigned int,
bool*) const'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:794:
undefined reference to
`clang::SourceManager::getLineNumber(clang::FileID, unsigned int, bool*)
const'
/usr/local/lib/libclangFrontend.a(TextDiagnosticPrinter.o): In function
`.L498':
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:830:
undefined reference to
`clang::DiagnosticInfo::FormatDiagnostic(llvm::SmallVectorImpl<char>&)
const'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:834:
undefined reference to
`clang::Diagnostic::getWarningOptionForDiag(unsigned int)'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:843:
undefined reference to
`clang::Diagnostic::isBuiltinExtensionDiag(unsigned int, bool&)'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:852:
undefined reference to
`clang::Diagnostic::getCategoryNumberForDiag(unsigned int)'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:870:
undefined reference to
`clang::Diagnostic::getCategoryNameFromID(unsigned int)'
/home/fla/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:939:
undefined reference to
`clang::SourceManager::getImmediateInstantiationRange(clang::SourceLocation)
const'
/usr/local/lib/libclangFrontend.a(TextDiagnosticPrinter.o): In function
`clang::SourceManager::getFileID(clang::SourceLocation) const':
/home/fla/llvm/tools/clang/lib/Frontend/../../include/clang/Basic/SourceManager.h:571:
undefined reference to `clang::SourceManager::getFileIDSlow(unsigned
int) const'
/usr/local/lib/libclangFrontend.a(TextDiagnosticPrinter.o): In function
`clang::SourceManager::getInstantiationLoc(clang::SourceLocation) const':
/home/fla/llvm/tools/clang/lib/Frontend/../../include/clang/Basic/SourceManager.h:589:
undefined reference to
`clang::SourceManager::getInstantiationLocSlowCase(clang::SourceLocation) const'
/usr/local/lib/libclangFrontend.a(TextDiagnosticPrinter.o): In function
`clang::SourceManager::getDecomposedInstantiationLoc(clang::SourceLocation)
const':
/home/fla/llvm/tools/clang/lib/Frontend/../../include/clang/Basic/SourceManager.h:639:
undefined reference to
`clang::SourceManager::getDecomposedInstantiationLocSlowCase(clang::SrcMgr::SLocEntry
const*, unsigned int) const'
/usr/local/lib/libclangFrontend.a(TextDiagnosticPrinter.o): In function
`DiagnosticClient':
/home/fla/llvm/tools/clang/lib/Frontend/../../include/clang/Basic/Diagnostic.h:976:
undefined reference to `vtable for clang::DiagnosticClient'
/usr/local/lib/libclangFrontend.a(TextDiagnosticPrinter.o):(.data.rel.ro._ZTVN5clang21TextDiagnosticPrinterE[vtable
for clang::TextDiagnosticPrinter]+0x18): undefined reference to
`clang::DiagnosticClient::IncludeInDiagnosticCounts() const'
collect2: ld returned 1 exit status

Their seems to definitely be some issue regarding linking of the libraries

and the steps used for installation were

svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
cd llvm/tools
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
cd .. (back to llvm)
./configure
make
(tried make install also)

Could someone help me out with what could be the root cause of this
problem and the possible solution.

Thanks,
Shashank

Hi!

Shashank Melkote meinte am 20.08.2010 00:13:

when I run this bit of code using
g++ tut1.cpp -g -fno-rtti `llvm-config --cxxflags --ldflags --libs`
-L/usr/local/lib -lclangBasic -lclangLex -lclangDriver -lclangFrontend
-lclangParse -lclangAST -lclangSema -lclangAnalysis

Try this one:

g++ tut1.cpp -g -fno-rtti -lclangFrontend -lclangDriver -lclangCodeGen
-lclangSema -lclangChecker -lclangAnalysis -lclangRewrite -lclangAST
-lclangParse -lclangLex -lclangBasic -lclangIndex `llvm-config
--cxxflags --ldflags --libs`

1) You did not specify all of Clang's libs. I don't really know which
ones are actually needed, but the linker should be smart enough to only
include those.

2) Always put the llvm libs after the Clang libs. Clang's libs use the
llvm ones and the linker will only check for open references in libs
given "down" the command line. Took me some time to learn that... :wink:

Regards, Jan.