cygwinをsamba上で使うとlnがおかしくなる

cygwin上でgccを使うとこんなエラーがでる。

$ echo -e '#include <stdio.h>\nint main(){printf("hello,world\\n");}'> a.c ; gcc a.c
16:34 [n9d] /usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/bin/as.exe: /usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/bin/as.exe: cannot execute binary file

どうもsamba上のファイルではcygwinシンボリックリンクを張れない模様。

シンボリックリンクもまた、Win32 パス名から POSIX パス名へとマップされます。 例えば、コマンド ln -s //pollux/home/joe/data /dataは、シンボリックリンクがデフォルトのファイルアクセスモードをセット出来なかった場合を除き、mount によって //pollux/home/joe/data が /data へのマウントポイントとして作成されていた場合と同様の結果をもたらします。 異なるのは、シンボリックリンクによるマッピングファイルシステム全体に渡って分布するといことと、カーネルテーブル中でマッチする最長のプレフィックスを使用する代わりに、ディレクトリツリー中を繰り返し移動することによって処理されるという点です。 なお、シンボリックリンクは「system」ファイル属性を正しくサポートするように構成されたネットワークドライブでのみ動作するということに気をつけて下さい。 多くのものは、デフォルトでは「system」ファイル属性を正しくサポートしません(例えば、UNIX の Samba サーバは、デフォルトではそのように動作しません)。

ローカルでおこなうかwinサーバでやればOKなのだが、気合いで行きたい場合は以下を実行すればOK

$ pushd /usr/i686-pc-cygwin/bin;find . -exec rm \{} \;ln -s /usr/bin/\{} \; ;popd

注意しなくてはならないのは、ディレクトリでlnするとうまくいかない。