garasubo's note

(´・ω・`)

Ubuntuのgccでリンクのオプションが無視される問題について

| Comments

Ubuntuを10.04から12.04にアップデートした際、 gccで-lで指定したファイルが全然リンクされないという問題があった。 たとえば、

gcc -lm main.c

として、main.cで普通にmathライブラリを使うようなファイルを書くと、 そんな関数の実体見つからんよ、と怒られていた。

ちょっと検索したらこんなの見つかった。
Ubuntu日本語フォーラム / math.h へのリンクがうまくいかない
どうやら、Ubuntuのあるバージョンからgccの—as-neededというオプションが デフォルトで有効になるような親切設計になったらしく、 これがあると-lのオプションはソースファイルの後に置かないと無視されるようになるらしい。 なので、

gcc main.c -lm

とすればいいのだが、makeの暗黙ルールでLDFLAGSはソースの前に置かれるようなっているので、なんかルール書き換えるのは癪。

そこで、LDFLAGSに

-Wl,--no-as-needed

というオプションを追加してやると、—as-neededオプションが無効化された。

しかし、なんでこんなオプションをデフォルトで有効にしてしまったのか。

Comments