リンカで失敗したときに

たまには,技術者っぽいことも書こうということで,気が向いた


Linuxコマンドをいい加減に紹介してみます.





さて,今回はC++/Cでmakeかけたときに失敗するよね.普通にコンパイルはうまく


いったのに,なぜだーっとなりますね.そんな時利用できるコマンドをいくつか.


あと,実行ファイルまで出来たけど,soが無いとか何とかで実行できないとかについても話してみます.





ldd:これは,実行ファイルが参照する共有ライブラリがきちんと参照できているかを教えてくれます.もし,参照できているのであれば,リンクしている*.soのバージョンが出てきます.だめな場合は,not foundを出すので,大量に共有ライブラリを利用している実行ファイルが実行できない場合には便利.





nm:これは,実行形式のファイルの内部に定義されている関数を出力するもので,このコマンドの中で定義されていない関数が大体エラーを起こしているわけですね.C言語ならばこれでOK.





nm 実行ファイル | c++filt: c++は,名前空間や引数や返値まで含めて内部的に関数名としています.そうすることで,関数のオバーロードとか出来るわけですね.で,nmだけだとそういった名前空間や引数の書式を生のままでだすので意味不明になります.c++filtをパイプでつないで上げると,可読な出力をしてくれるわけですね.