gccのコマンドラインオプションの並び順
Objective-Cの勉強をしていて、gccでいざコンパイルと思ったら、リンクの段階でエラーが出るでる。調べてみたら、gccのコマンドラインオプションには順番があって、リンカ(ld)に関するオプションである-lや-Lは、後ろに付ける必要があるとのこと。
どうやらリンカは、オブジェクトファイルのシンボル名解決をするとき、不明なシンボル名があると、「その場所以降」からシンボル名見つけて解決する動作をするからのようです。
×: $ gcc -o foo -lobjc foo.m ◯: $ gcc -o foo foo.m -lobjc