multiple definitions of 'main' with -lfl (linking flex lib.)

http://lists.apple.com/archives/studentdev/2001/Apr/msg00299.html

問題なく動作していたパーサが、ちょこまかと色々ソースをいじってコンパイルすると

multiple definition of 'main' が発生。何でそんなことになるか探してみると、上記のリンク先に回答があった。

リンクオプションとオブジェクトの順番がそのまま実際にリンカがオブジェクトをつなぎ合わせる順番になっていることを
知らなかった。やっぱり、実際にソースを書かないとこういう経験は積めない。

×gcc -lfl lexer.o
gcc lexer.o -lfl

つまり、リンカがリンクする順番は、上記のようになっている。大抵のネット上の情報は上記の原理の説明なしに
下が書かれているから、何も考えなければ問題ない。でも、問題が起こったときには、特定するのはかなり難しい。