Error while linking LLVM files

Hi!
I’m trying to learn LLVM and I want to compile the Kaleidoscope compiler.
according to:
http://llvm.org/docs/tutorial/LangImpl3.html

I’m compiling it with:

clang++ -g -O3 test.cpp llvm-config --cppflags --ldflags --libs core -o toy

and it indeed works.
The problem is that when using eclipse it forces me to divide the compilation into two steps:

g++ -O0 -g3 -Wall -c -fmessage-length=0 llvm-config --cppflags --ldflags --libs core -MMD -MP -MF"src/lunac.d" -MT"src/lunac.d" -o “src/test.o” “…/src/test.cpp”
(which compiles fine)

and:

Invoking: Cross G++ Linker
g++ llvm-config --cppflags --ldflags --libs core -o “test” ./src/test.o

which gives me error:

./src/test.o: In function NumberExprAST::Codegen()': /home/wdanilo/dev/lunac/Debug/../src/test.cpp:358: undefined reference to llvm::APFloat::APFloat(double)’
/home/wdanilo/dev/lunac/Debug/…/src/test.cpp:358: undefined reference to llvm::getGlobalContext()' /home/wdanilo/dev/lunac/Debug/../src/test.cpp:358: undefined reference to llvm::ConstantFP::get(llvm::LLVMContext&, llvm::APFloat const&)’

[…]

Why Linker is not working with these flags? How can I fix it?

In the previous mail there was little bug, the code executed by eclipse to compile the .o file was:

g++ -O0 -g3 -Wall -c -fmessage-length=0 llvm-config --cppflags --ldflags --libs core -MMD -MP -MF"src/test.d" -MT"src/test.d" -o “src/test.o” “…/src/test.cpp”
(which compiles fine)

2012/11/6 Wojciech Daniło <wojtek.danilo.ml@gmail.com>

When you're passing arguments to the linker, the order matters. Try
reordering the command-line so test.o comes first.

-Eli

Thank you, it works! :slight_smile:

2012/11/6 Eli Friedman <eli.friedman@gmail.com>