僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。
そろそろ飽きてきたお馬鹿なfizzbuzz。FreeBSD-11-CURRENTで試す。
s/gcc/cc/ する必要があった。
make all による cc -c はうまくいった。しかし、
$ time make link cc -Wall *.o -o 1000000 cc: Argument list too long *** Error code 126 Stop. make: stopped in $DIR/make real 0m0.324s user 0m0.000s sys 0m0.089s
66668行がtoo_longなのはどこだ。
$ ls *.o -bash: /bin/ls: Argument list too long
$ cc --version FreeBSD clang version 3.4.1 (tags/RELEASE_34/dot1-final 208032) 20140512 Target: x86_64-unknown-freebsd11.0 Thread model: posix
ちなみにwheezyでは、
$ time make link gcc -Wall *.o -o 1000000 strip 1000000 real 0m14.000s user 0m9.157s sys 0m4.548s
$ gcc --version gcc (Debian 4.7.2-5) 4.7.2 Copyright (C) 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions.\ There is NO warranty; not even for MERCHANTABILITY or \ FITNESS FOR A PARTICULAR PURPOSE.
もちろん ls(1)も *.o を全部、ちゃんと出力してくれた。
FreeBSD 11-CURRENTで。
ディレクトリの長さか何かで違うらしい。
とりあえず一例。
$ ls | wc -l 45479 $ ls * > /dev/null
$ touch foo $ ls | wc -l 45480 $ ls * > /dev/null -bash: /bin/ls: Argument list too long
200万までのfizzbuzzができたので、次を試す。
$ time python div_make.py 300000 real 0m1.654s user 0m0.724s sys 0m0.464s
これは難なく出た。
$ ls -f | grep '\.c' | wc -l 20001 $ time make > /dev/null real 88m20.524s user 52m8.256s sys 20m8.880s
20001行のmake all は処理できた。
40005行のmain.cにもコケなかった。
しかしながら、
$ time make link gcc -Wall *.o -o 3000000 collect2: error: ld terminated with signal 9 [強制終了] make: *** [link] エラー 1 real 3m51.627s user 0m8.365s sys 0m14.533s
リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。