- 1 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 00:07:39 ]
- 史上最強かもしれないツール、GCC(GNU Compiler Collection)について語るスレ。
GNU本家のGCCページ gcc.gnu.org/ Binutils - Collection of binary utilities ←これも必要だぞ。 www.gnu.org/directory/GNU/binutils.html GNU Binutils sources.redhat.com/binutils/ GCC online documentation gcc.gnu.org/onlinedocs/ Installing GCC gcc.gnu.org/install/ GCC Timeline gcc.gnu.org/releases.html#timeline Calendar gcc.gnu.org/develop.html#timeline 前スレ GCCについて part7 pc11.2ch.net/test/read.cgi/tech/1145357824/l50
- 2 名前: ◆3.JjF77I26 mailto:sage [2007/10/13(土) 00:58:22 ]
- 2get
- 3 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 01:09:51 BE:328057362-2BP(100)]
- >>1乙
- 4 名前:デフォルトの名無しさん [2007/10/17(水) 11:28:31 ]
- x86です。
double d = 0.3; int i; i = d * 1000; とすると i=299になります。 d = d * 1000; i = d; とするとi=300になります。 Macのgccで試したら300になるので生成したコードを調べると SSE2インストラクションを使ってました。試しに-msse2でコンパイルすると両方とも300に なりました。 gccは3.2.2, 3.3.5, 4.1.1と試しましたが全部同じです。 manに書かれている以下の文が関係しているのでしょうか? ... -msse2 ... The resulting code should be considerably faster in the major- ity of cases and avoid the numerical instability problems of 387 code, この問題をどこか詳しく説明している文書はありますでしょうか?
- 5 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 11:56:17 ]
- x86は浮動小数点数レジスタが80ビットあり、演算はこの大きさで行われる
メモリに書き戻されるタイミングで64ビットに切り捨てられるのだが、 コンパイラの最適化の具合によって メモリに書き戻されるタイミングが変わり、計算結果が変わることがある
- 6 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 17:19:41 ]
- floatだと300になるんだよなぁ。
最初の方で double d = 2.99999999999999988897769753748434595763683319092e-1; float f = 3.00000011920928955078125e-1; に変換されていた。 -O0だとハードウェアが使うそのままの形で渡すから、マシン依存ってことかな? -O2だとmsse2じゃなくても300になった。 gcc.gnu.org/bugs.html#known だね。 gccはrtlとか出てきたらよく分からんなぁ。GIMPLEはわかりやすいんだが。。。
- 7 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 19:24:51 ]
- GCC用のソースをVCでコンパイルできるようにしてたときにちょっと引っかかったんだけど、
構造体の初期化でメンバ名を指定できるのと、その他の初期値を指定できるなんて 初めて見たよ。 たしかに便利っちゃぁ便利だけど...
- 8 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 19:39:32 ]
- 全然普及しないC99
- 9 名前:4 mailto:sage [2007/10/17(水) 19:41:08 ]
- >>5 >>6
大変参考になりました。 ありがとうございます!
- 10 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 06:39:02 ]
- >>7
VCってC99サポートしてないの?
- 11 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 06:52:22 ]
- してないよ
- 12 名前:デフォルトの名無しさん [2007/10/18(木) 16:55:33 ]
- 低反発枕が凄い硬くて反発力が激しいのですが何とかなりませんか。
- 13 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 18:13:06 ]
- 知るか
- 14 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 18:51:03 ]
- >>7
コンパウンドリテラル
- 15 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 16:41:06 ]
- >>7
designated Initializerか >>8にもあるけどC99で取り入れられてるな
- 16 名前:デフォルトの名無しさん [2007/10/20(土) 08:33:01 ]
- max-inline-insns-singleはどのようなときに設定するものなのでしょうか?
- 17 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 19:19:15 ]
- >>6
いや、0.3=3/10は2進数では無限小数になって丸め誤差が出ているだけでは? 0.3 = 0.10011001100110011001100…
- 18 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 20:54:41 ]
- >>17 0.010011001・・・
- 19 名前:デフォルトの名無しさん [2007/10/25(木) 06:16:18 ]
- gccのプリプロセッサが、ヘッダファイルをどのディレクトリから探しているのか、探している様子を
画面表示するオプションは無いでしょうか? gccの-iprefixオプションを使うと、途端にいくつかの標準ヘッダが見付からなくなる現象で悩んでます。
- 20 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 09:08:33 ]
- -vじゃだめなの?
- 21 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 07:52:36 ]
- GCC 4.3.0 Status Report (2007-10-25)
gcc.gnu.org/ml/gcc/2007-10/msg00441.html stage3まではサクサク進んできたけど、現在バグ取りで膠着状態 まだまだ使える状態じゃないっぽい
- 22 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 10:29:55 ]
- コード生成以後もいろいろ大変なんだろうけど、
C++やJavaみたいに、言語規格自体が大きくて、 しょっちゅう変更される言語も含まれるから、 リリースがどんどん重くなりそうだね。 libstdc++なんか、言語処理系のバージョンとの関係が切り放せないし。
- 23 名前:デフォルトの名無しさん [2007/10/27(土) 22:51:53 ]
- C++は変更が2009年までに本当に終わるのかどうかが心配されているわけだが。。。
- 24 名前:デフォルトの名無しさん [2007/10/27(土) 22:55:55 ]
- gcc -gと-ggdbと-g3の違いは何でしょうか。gcc-4.1.2です。
- 25 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 01:31:47 ]
- デバッグ情報をどれだけ入れるかの違い。
- 26 名前:デフォルトの名無しさん [2007/10/28(日) 01:33:24 ]
- もう少し具体的に。
-g3のマクロ云々はいいので、-gと-ggdbだけでも。
- 27 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 02:03:55 ]
- gcc -g はmanで詳細が調べられる
gcc -ggdbはmanで詳細が調べられる gcc -g3はmanで詳細が調べられる これぐらいかな違いは。
- 28 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 02:08:43 ]
- manにもinfoにも載ってないよ。
- 29 名前:デフォルトの名無しさん [2007/10/28(日) 05:58:40 ]
- 構造体のパックってどうやるんですか
- 30 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 07:06:55 ]
- パックしたい構造体に#pragma pack(1)を使う
- 31 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 07:36:09 ]
- __attribute__((packed)) は?
- 32 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 16:10:01 ]
- >>30-31
pragma より atribute がお勧め。
- 33 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 16:21:57 ]
- 今時、構造体のパックして何するの?
- 34 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 17:31:01 ]
- お肌にいい
- 35 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 17:40:37 ]
- >>33
昔は必要だったの?
- 36 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 17:56:39 ]
- >>33
余計なalignmentが入るのを防ぐ。 最初にデータ構造ありき、な時は必要でしょ。 ファイルフォーマットとかパケットの構造体作る時とか。
- 37 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 18:08:32 ]
- そういうわけだから、今でも要るところには要る。
- 38 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 18:14:06 ]
- アライメント違反でSIGBUSするCPUの場合はどうするの?
- 39 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 18:17:31 ]
- >>38
ずっと前に、コンパイラがバイト単位での読み書きに翻訳してくれたりした覚えが あるんだけど、今考えるとメンバ単体をポインタ経由でアクセスしたら死にそう。
- 40 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 18:27:17 ]
- OSのカーネルがやってくれる場合もあるな。
でも、OSもコンパイラも面倒見てくれない環境もあるべ。 自分でバイト単位に書き込むのか?
- 41 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 18:33:59 ]
- >>40
だれも面倒見てくれないんなら自分でやればいいだろ。
- 42 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 12:23:46 ]
- >>40
trapで落ちてからか〜、大昔からあるテクニックだけど今時のマシンでやったらstallしまくりでいやげだなぁ。 softfloatとかも便利だけど鈍いよね。
- 43 名前:デフォルトの名無しさん [2007/10/29(月) 21:34:43 ]
- >>42
だがそれがいい
- 44 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 22:07:24 ]
- >>40
エミュするのめんどいんで、自力でなんとかしてくれ。 >>42 正確に数えたことないけど数十倍の時間がかかるはず。 根性でもう少し高速化できるかも知れんが、あくまで救済措置だからのう… そんな所にエネルギー使いたくない。
- 45 名前:デフォルトの名無しさん [2007/10/31(水) 03:47:24 ]
- __DATE__とか__TIME__を現在の日時に展開するのをやめさせたいんですが、何か方法はありますか?
こいつらのせいで、毎回チェックサムの異なるバイナリが生成されてしまいます・・・。
- 46 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 04:11:29 ]
- undef?
- 47 名前:デフォルトの名無しさん [2007/10/31(水) 04:27:42 ]
- できないみたい
- 48 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 04:29:32 ]
- __DATE__と__FILE__を含む行をコメントアウト
- 49 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 04:32:55 ]
- #define __DATE__ ""
はムリ?
- 50 名前:デフォルトの名無しさん [2007/10/31(水) 04:36:47 ]
- redefeindでerror
- 51 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 04:50:28 ]
- コンパイルオプションに -undef ってなかったっけ?
それでも __DATE__ とかには効かないかもしれないけどね。
- 52 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 06:01:50 ]
- #if defined(__DATE__)
#undef __DATE__ #define __DATE__ "2007/10/31" #endif
- 53 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 12:12:54 ]
- -undefは他のマクロも消えて影響大きすぎるから
gcc -U__DATE__ -D__DATE__=\"hoge\" でいいだろ。
- 54 名前:デフォルトの名無しさん [2007/10/31(水) 18:09:14 ]
- 無料だな
- 55 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 13:37:57 ]
- 4.3もやっぱり実行速度は今までのより遅くなっているみたいだね
- 56 名前:デフォルトの名無しさん [2007/11/06(火) 05:57:27 ]
- マルチスレッドと最適化の問題。 難しいもんですね。
kerneltrap.org/Linux/Fixing_Compiler_Misoptimizations
- 57 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 01:33:13 ]
- LLVMってどうなのさ
- 58 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 16:03:54 ]
- llvmで検索してでてくる日本語サイトがゴミ
- 59 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 01:21:07 ]
- gccのltoが手間取っている間にこっちは順調にやってるぽい?
まだ最適化のステージがgccには及ばない部分もあるかもしれない。 まだちょっとバグがあるけど、もう一歩で実用的になりそうな気配が。 結構appleがコミットしてるな。 offline optimizationとやらがいまいちよくわからないけど、 apiで簡単に使えるようなフレームワークがあるのかな? llvm-gccで直にコンパイルしたらバイナリサイズが結構でかいんだが、 中に実行時最適化の為のコードが入ってるのかな。 どういう手順で使うのが普通なんだろ。
- 60 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 01:50:43 ]
- osnews.com/story.php/18889/Kaleidoscope-Implementing-a-Language-with-LLVM/
ちょうどなんかフロントエンド向けのチュートリアルがupされた模様。
- 61 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 01:58:46 ]
- offlineってのはruntimeじゃない時。
compile-timeでもlink-timeでもない。 インストールした直後とか、利用者に指示された時。
- 62 名前:デフォルトの名無しさん [2007/11/09(金) 18:40:12 ]
- QT
- 63 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 19:35:45 ]
- llvm-gcc4をcygwin上でbuildできた人はいる?
stage2でerrorになるのだが… どうも、stage1で作ったxgccの動作確認で失敗してるみたい。 空のmain関数だけのtpをxgccでcompileして実行するとseg. faultで落ちる。 生成したアセンブリを見ると、spを変な値に設定してるようだ。
- 64 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 12:03:13 ]
- cygwinじゃないけどcflagsに何かmarchあたりの設定してるとビルドできなかった。
- 65 名前:デフォルトの名無しさん [2007/11/12(月) 02:09:17 ]
- モノによっては
-mtune=k7 とか、mtune指定するとダメなやつもあったり そもそも-marchやるだけでダメなやつもあったり -targetとか、あそこらへん指定すると cannot build executable とか出くさるものもあったり
- 66 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 20:43:38 ]
- demand pagingってオプションやプラグマとかで
無効化できないものでしょうか?
- 67 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 21:39:39 ]
- どのdemand pagingのことを言っているのかは知らないけど、
ふつうはOSの機能なんじゃないの?
- 68 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 21:41:35 ]
- VM?
- 69 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 17:21:26 ]
- gccでexitをフックするにはどうしたらいいでしょうか?
segmentation faltとかならgdbで場所を把握できるんですが, exitで普通に終わってしまって..
- 70 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 17:37:52 ]
- at_exit?
- 71 名前:デフォルトの名無しさん [2007/11/13(火) 18:29:12 ]
- >>69
(gdb) b exit (gdb) b _exit では止まらないと申すか。
- 72 名前:デフォルトの名無しさん [2007/11/16(金) 17:40:13 ]
- #include <stdio.h>
#include <sys/types.h> int main(void) { printf("%d\n",sizeof(size_t)*8; return 0; } 例えば上のようなプログラムでは /usr/include/libのどのファイル使って実行ファイルを 作成するんでしょうか できれば調べ方なんか知りたいですが
- 73 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 18:00:07 ]
- >>72
gcc -v foo.c とか、 ldd 実行ファイル とか
- 74 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 19:04:28 ]
- >>72
リンカにマップを吐かせると...
- 75 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 01:31:03 ]
- 1つ質問なのですが、ここで良いでしょうか。
OSはFreeBSD6.3-PRERELEASEで、C言語の勉強をしていました。 ソースは酷い有様なのでエラーが多発するのは分かるのですが、 何かいつもと違うメッセージが出まして・・・。 最後の3行が(手書きですが) cc: Internal error: Segmentation fault: 11 (program ld) Please submit a full bug report. See <URL:gcc.gnu.org/bugs.html> for instructions. と書いてありました。 これってどうしたら良いでしょうか。 放っておけば良いとは思うのですが、気になったものでして。
- 76 名前:75です mailto:sage [2007/11/17(土) 02:44:26 ]
- すみません自己解決しました。原因が分かりました。
コマンドを間違えて打っていました。 いつもは cc -o (実行ファイルの名前) (ソースファイル) で打っていたのですが今回 cc (実行ファイルの名前) (ソースファイル) と打ち込んで実行していました。 お騒がせしました。
- 77 名前:デフォルトの名無しさん [2007/11/18(日) 00:09:24 ]
- >>69
どうなった? >>74 マップは関係なくね?
- 78 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 10:31:12 ]
- 大有りだろ
何がリンクされたか一目瞭然じゃん
- 79 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 12:19:24 ]
- 最近の子はマップファイルの出し方も知らんのかね?
- 80 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 17:31:38 ]
- -pthreadと-lpthreadの違いって何ですか?
個人的には常に後者を使ったほうがわかりやすいと思うんですけど なんでライブラリなしのオプションがGCCにあるのでしょう?
- 81 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 17:39:45 ]
- >>80
単にライブラリをリンクするだけじゃ対応できない部分があるので、 gcc的にもちゃんとthreadをサポートしてくれる(かもしれない)オプション。
- 82 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 18:31:14 ]
- >>80
実際に試してみれば判るけど、若干できたバイナリに違いがあるから 特に指定のない限り-pthreadの方がいいと思われる。
- 83 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 18:40:24 ]
- HP-UXとか要注意な。infoかソース読んで。
gccはスレッドローカル変数とかあって、 ライブラリに全部頼るわけにいかない部分もあるし。
- 84 名前:デフォルトの名無しさん [2007/11/18(日) 20:23:57 ]
- 誰も-pthreadについて具体的な事を語らない罠。
ま、infoにも詳しい情報ないししょうがないとは思うがw
- 85 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 20:38:29 ]
- 出来損ないOSではつけないとイカンようですな
- 86 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 20:45:18 ]
- 正直あまり意味のないオプションだからね。今となっては。
#include <pthread.h>と-lpthreadで全て済んでしまう。
- 87 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 20:45:45 ]
- >>81でFA出てるじゃん。
gcc的にも、というだけじゃなくOS(ライブラリ)的にもだけど。 >>85 gccで-pthreadまたは-pthreadsオプションがあるOSは Linux, Darwin, *BSD, System V, HP-UX, AIX, Solaris があるが、これら全て出来損ない? w
- 88 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 20:52:13 ]
- そうだよ
完璧なOSはWindowsのみ
- 89 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 21:11:55 ]
- つけてもつけなくても同じ、
と つけないと正常に動作しない、 は全然違うぞ。 んで、出来ソコナイはどれ?Linuxは違うな。
- 90 名前:デフォルトの名無しさん [2007/11/19(月) 00:14:11 ]
- リンカ言うと、変な四角い顔したタレントが思い出されて嫌である。
- 91 名前:デフォルトの名無しさん [2007/11/19(月) 01:30:12 ]
- >>87
OSじゃなくてarch依存じゃなかったか。 それと、gccのinfoにはプリプロセサとリンカにマルチスレッドプログラムのコンパイルを行なっていることを伝えるオプションだと書いてあるだけで、実際に何が変化するのかは書いてなくない? -D_REENTRANTとの関係も教えてくれ。i386のLinuxの話でいいから。
- 92 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 01:37:08 ]
- 具体的に語る人を待とう。
>>87 には無理そうだが。
- 93 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 09:38:34 ]
- Sunとかのコンパイラの-mtみたいなもんだろ。
- 94 名前:デフォルトの名無しさん mailto:age [2007/11/19(月) 14:48:55 ]
- とうとうここも低能のアホレス来るようになったか。
- 95 名前:80 mailto:sage [2007/11/20(火) 11:24:03 ]
- おいらの質問で場が荒れたみたいですんませんでした。
レスをくれた人どうも。 とりあえずi386 GNU/LinuxのGCC -pthreadすると プリプロセサで#define _REENTRANT 1が定義されますね。 あとはリンカで-lpthreadやってるだけなのかなあ。
- 96 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 11:28:40 ]
- なぜこういうことを聞いたかってのは下の記事
「pkgconfigとlibtoolの悪」 udrepper.livejournal.com/19395.html で、-pthreadしてると-Wl,--as-neededが効かなくなるぞって話です。 で、pkgconfig/*.pcを検索してみたら-pthreadをしてるのはQt関連とgthreadだけ。 だったら、-pthreadを-D_REENTRANT -lpthreadで置き換えられないかなあ と思って聞いたわけです。 ただ、たとえそうしてもLDFLAGS=-Wl,--as-neededをやるとコンパイルできない プログラムなんかもあったりして不思議ですが。
- 97 名前:デフォルトの名無しさん [2007/11/20(火) 16:57:23 ]
- >>87
Linuxのmanでは「-pthread」はFreeBSD固有のオプションってなってるけど。。。
- 98 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 19:09:19 ]
- >>97
偏屈なmanだな。 OSXでman gccしたらRS/6000andPowerPCのオプションに書いてあるな。 i386にはないんだろうか。
- 99 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 19:56:01 ]
- >>98
Fedora 8に入ってるmanを見てみました。 gcc-4.1.2のマニュアルだと、 IA-64 Option, RS/6000 and PowerPC Options, SPARC Options に書いてあります。 FreeBSD固有って書いてあるのは、Linux日本語manだけど、gcc-2.95.3の翻訳だから今となっては古い。
- 100 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 00:06:24 ]
- freebsdのスレッド対応ってまともになったん?まだグダグダ?
|

|