gccの-lオプションが効かない時があるのでその原因を確かめてみた。
$ gcc pp4.c pp.c pp2.c /tmp/ccj9EogJ.o: In function `func': pp2.c:(.text+0x7): undefined reference to `link2' /tmp/cchGaury.o: In function `main': pp.c:(.text+0x11): undefined reference to `link1' collect2: ld はステータス 1 で終了しました こんなソースがある場合、link1とlink2を含むlibpp3.soで解決する必要がある 当初、ソース1個以上指定した後の-lオプションのみが有効かと思いきや リンクメッセージがないと-lが効かないという話を教えてもらったので試してみた。 $ gcc pp4.c -l pp3 pp.c pp2.c /tmp/ccj9EogJ.o: In function `func': pp2.c:(.text+0x7): undefined reference to `link2' /tmp/cchGaury.o: In function `main': pp.c:(.text+0x11): undefined reference to `link1' collect2: ld はステータス 1 で終了しました あら、ほんとだ。pp4.cはlink1もlink2も依存していないため これでもエラーが起こる・・・。 $ gcc pp4.c pp.c -l pp3 pp2.c では、link1に依存するpp.cの後に-l pp3を移動させると エラーはなくなった~ てっきり /tmp/ccj9EogJ.o: In function `func': pp2.c:(.text+0x7): undefined reference to `link2'みたいなのが出ると思ったのだけどそうでもないらしい。 つまり・・・ -lオプションは最後に書けということですなぁ。 バージョンによっては直ってるgccもあるらしい。 |
|
忍者ブログ [PR] |