トップ «前の日記(2014-08-20(Wed)) 最新 次の日記(2014-08-22(Fri))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2014-08-21(Thu) 依然として青空、でも蝉の声はトーンダウン

cc と gcc

そろそろ飽きてきたお馬鹿な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 を全部、ちゃんと出力してくれた。

45479より多いとダメ

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

流石に2万1個のリンクは無理だったかも

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や内容が変った場合はあしからず。

index.htmlは ここから。