objdump しようとしたらcommand not found と言われた

nm はあるのに何故・・・
ということで、いつも通り MacPorts で入れようとした

$ port search objdump
No match for objdump found

な、なんだってー!


調べてみたところ、binutils に含まれているらしい。
なるほどと思う反面、こういうのも search で検索できてもいいかなと思ったり。
svn で検索しても subversion がひっかからない、なんてこともあったし。
まぁ愚痴はともかく、binutils をインストール。

$ sudo port install binutils
$ port contents binutils | grep objdump
  /opt/local/bin/gobjdump
  /opt/local/i386-apple-darwin9.3.0/bin/objdump
  /opt/local/share/man/man1/gobjdump.1.gz

ん、ちゃんと入ってる。
g がプレフィックスになってる。もとから入っているものと名前が衝突しないようにだろうか。
binutils に入ってる他のプログラム (objcopy, nm, ar, ranlib など) や、coreutils に含まれてるプログラムにも g というプレフィックスがついてるし。
ちなみに、/opt/local/bin/gobjdump と /opt/local/i386-apple-darwin9.3.0/bin/objdump は全く同一のものでした。


で、objdump を使ってみたんですが、文字化けしてる・・・

$ gobjdump --help | nkf --guess
EUC-JP (LF)

coreutils はちゃんと UTF-8 で話してくれるのに、binutils はどれも EUC-JP で話す模様。
/opt/local/share/locale/ja/LC_MESSAGE/binutils.mo が原因か。直せたらまた書こう。


追記。案外簡単に直せた。
gettext-tools なんて使ったこと無かったけど、ググればなんとかなるもんだね。


正しい方法かどうかわからないけど、以下のようにしたら直った。

$ su    # いちいち毎回 sudo するのが面倒だったので。。。
# port uninstall binutils
# port extract binutils    # build とかまでやっても大丈夫かも
# cd /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_devel_binutils/work/binutils-2.17/binutils/po
# nkf -w < ja.po | sed -e 's/EUC-JP/UTF-8/' > ja.po.new
# nkf -w < ja.po > ja.po.utf8
# diff ja.po.new ja.po.orig.utf8
13c13
< "Content-Type: text/plain; charset=UTF-8\n"
    • -
> "Content-Type: text/plain; charset=EUC-JP\n" # msgfmt ja.po.new -o ja.gmo # port install binutils # exit $ rehash # 不必要かな $ gobjdump --help | nkf -g UTF-8 (LF)

以上。ギアス始まる前に終わってよかったw


もう一回追記。
一旦アンインストールした後に再びインストールするなんて七面倒くさいことしなくても、単に /opt/local/share/locate/ja/LC_MESSAGE/binutils.mo を差し替えればよかったわけだ。
今思うと、なんで上記の方法をとったのかが自分でもわからない。・・・ギアスの時間が迫ってて焦ったから?


というわけで、恐らくこれが普通に直す方法。

$ su
# cd /opt/local/var/macports/distfiles/binutils
# tar jxf binutils-2.17.tar.bz2
# cd binutils-2.17/binutils/po
# nkf -w < ja.po | sed -e 's/EUC-JP/UTF-8/' | msgfmt - -o /opt/local/share/locale/ja/LC_MESSAGE/binutils.mo
# exit

以上!