GCC может быть довольно требовательным к порядку, в котором он принимает свои аргументы:
# Works.
g++ Foo.cpp -L. -I. -lBar -o Foo
# Linker errors.
g++ -o Foo -I. -L. -lBar Foo.cpp
Каковы, в частности, требования к упорядочиванию параметров командной строки?