Lionにて。
WordNet®をビルドしようとしていて、リンカさんに
$ ./configure $ make ... ld: warning: ignoring file ../lib/libWN.a, file was built for archive which is not the architecture being linked (x86_64)
て云われた。WordNet3.0でも2.1でも同様。
$ file lib/libWN.a lib/libWN.a: current ar archive $ lipo -info ../lib/libWN.a input file lib/libWN.a is not a fat file Non-fat file: lib/libWN.a is architecture: x86_64
問題なさそうに見えるのに…
$ ./configure CFLAGS="-O3 -arch i386" $ make
だとビルドできて一応動くのだけれど、それではちょっと悔しいというか残念というか。
ぐぐってみるとXCodeとiPhoneのarmv6/v7あたりの話(本当にビルドターゲットが異なるケース)がよく出てくるけどちょっと違う。
不意にarを調べてみた。
$ which ar /usr/local/bin/ar $ which ranlib /usr/local/bin/ranlib
おや?
$ ls -l /usr/local/bin/ar -rwxr-xr-x 2 root admin 655968 1 23 15:30 /usr/local/bin/ar $ ls -l /usr/local/bin/ranlib -rwxr-xr-x 2 root admin 655968 1 23 15:30 /usr/local/bin/ranlib $ ls -l /usr/local/bin/objdump -rwxr-xr-x 2 root admin 1738904 1 23 15:30 /usr/local/bin/objdump
タイムスタンプが objdump と一緒だ… こないだ brew install binutils した時に入ったと見て間違いないだろう…
/usr/bin のやつを指名してやってみる。
$ ./configure AR="/usr/bin/ar" RANLIB="/usr/bin/ranlib" CFLAGS="-O3 -arch x86_64" $ make clean ; make
今度は行けた。犯人はbinutilsのar/ranlibだった。
ちなみに今回のは file コマンドで見ると
$ file lib/libWN.a lib/libWN.a: current ar archive random library
binutils版と違った表示になることを発見。