GCCについて part8
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/10/13(土) 00:07:39GNU本家のGCCページ
http://gcc.gnu.org/
Binutils - Collection of binary utilities ←これも必要だぞ。
http://www.gnu.org/directory/GNU/binutils.html
GNU Binutils
http://sources.redhat.com/binutils/
GCC online documentation
http://gcc.gnu.org/onlinedocs/
Installing GCC
http://gcc.gnu.org/install/
GCC Timeline
http://gcc.gnu.org/releases.html#timeline
Calendar
http://gcc.gnu.org/develop.html#timeline
前スレ
GCCについて part7
http://pc11.2ch.net/test/read.cgi/tech/1145357824/l50
0004デフォルトの名無しさん
2007/10/17(水) 11:28:31double 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,
この問題をどこか詳しく説明している文書はありますでしょうか?
0005デフォルトの名無しさん
2007/10/17(水) 11:56:17メモリに書き戻されるタイミングで64ビットに切り捨てられるのだが、
コンパイラの最適化の具合によって
メモリに書き戻されるタイミングが変わり、計算結果が変わることがある
0006デフォルトの名無しさん
2007/10/17(水) 17:19:41最初の方で
double d = 2.99999999999999988897769753748434595763683319092e-1;
float f = 3.00000011920928955078125e-1;
に変換されていた。
-O0だとハードウェアが使うそのままの形で渡すから、マシン依存ってことかな?
-O2だとmsse2じゃなくても300になった。
http://gcc.gnu.org/bugs.html#known だね。
gccはrtlとか出てきたらよく分からんなぁ。GIMPLEはわかりやすいんだが。。。
0007デフォルトの名無しさん
2007/10/17(水) 19:24:51構造体の初期化でメンバ名を指定できるのと、その他の初期値を指定できるなんて
初めて見たよ。
たしかに便利っちゃぁ便利だけど...
0008デフォルトの名無しさん
2007/10/17(水) 19:39:320010デフォルトの名無しさん
2007/10/18(木) 06:39:02VCってC99サポートしてないの?
0011デフォルトの名無しさん
2007/10/18(木) 06:52:220012デフォルトの名無しさん
2007/10/18(木) 16:55:330013デフォルトの名無しさん
2007/10/18(木) 18:13:060014デフォルトの名無しさん
2007/10/18(木) 18:51:03コンパウンドリテラル
0015デフォルトの名無しさん
2007/10/19(金) 16:41:06designated Initializerか
>>8にもあるけどC99で取り入れられてるな
0016デフォルトの名無しさん
2007/10/20(土) 08:33:010017デフォルトの名無しさん
2007/10/20(土) 19:19:15いや、0.3=3/10は2進数では無限小数になって丸め誤差が出ているだけでは?
0.3 = 0.10011001100110011001100…
0018デフォルトの名無しさん
2007/10/20(土) 20:54:410019デフォルトの名無しさん
2007/10/25(木) 06:16:18画面表示するオプションは無いでしょうか?
gccの-iprefixオプションを使うと、途端にいくつかの標準ヘッダが見付からなくなる現象で悩んでます。
0020デフォルトの名無しさん
2007/10/25(木) 09:08:330021デフォルトの名無しさん
2007/10/27(土) 07:52:36http://gcc.gnu.org/ml/gcc/2007-10/msg00441.html
stage3まではサクサク進んできたけど、現在バグ取りで膠着状態
まだまだ使える状態じゃないっぽい
0022デフォルトの名無しさん
2007/10/27(土) 10:29:55C++やJavaみたいに、言語規格自体が大きくて、
しょっちゅう変更される言語も含まれるから、
リリースがどんどん重くなりそうだね。
libstdc++なんか、言語処理系のバージョンとの関係が切り放せないし。
0023デフォルトの名無しさん
2007/10/27(土) 22:51:530024デフォルトの名無しさん
2007/10/27(土) 22:55:550025デフォルトの名無しさん
2007/10/28(日) 01:31:470026デフォルトの名無しさん
2007/10/28(日) 01:33:24-g3のマクロ云々はいいので、-gと-ggdbだけでも。
0027デフォルトの名無しさん
2007/10/28(日) 02:03:55gcc -ggdbはmanで詳細が調べられる
gcc -g3はmanで詳細が調べられる
これぐらいかな違いは。
0028デフォルトの名無しさん
2007/10/28(日) 02:08:430029デフォルトの名無しさん
2007/10/28(日) 05:58:400030デフォルトの名無しさん
2007/10/28(日) 07:06:550031デフォルトの名無しさん
2007/10/28(日) 07:36:090032デフォルトの名無しさん
2007/10/28(日) 16:10:01pragma より atribute がお勧め。
0033デフォルトの名無しさん
2007/10/28(日) 16:21:570034デフォルトの名無しさん
2007/10/28(日) 17:31:010035デフォルトの名無しさん
2007/10/28(日) 17:40:37昔は必要だったの?
0036デフォルトの名無しさん
2007/10/28(日) 17:56:39余計なalignmentが入るのを防ぐ。
最初にデータ構造ありき、な時は必要でしょ。
ファイルフォーマットとかパケットの構造体作る時とか。
0037デフォルトの名無しさん
2007/10/28(日) 18:08:320038デフォルトの名無しさん
2007/10/28(日) 18:14:060039デフォルトの名無しさん
2007/10/28(日) 18:17:31ずっと前に、コンパイラがバイト単位での読み書きに翻訳してくれたりした覚えが
あるんだけど、今考えるとメンバ単体をポインタ経由でアクセスしたら死にそう。
0040デフォルトの名無しさん
2007/10/28(日) 18:27:17でも、OSもコンパイラも面倒見てくれない環境もあるべ。
自分でバイト単位に書き込むのか?
0041デフォルトの名無しさん
2007/10/28(日) 18:33:59だれも面倒見てくれないんなら自分でやればいいだろ。
0042デフォルトの名無しさん
2007/10/29(月) 12:23:46trapで落ちてからか〜、大昔からあるテクニックだけど今時のマシンでやったらstallしまくりでいやげだなぁ。
softfloatとかも便利だけど鈍いよね。
0043デフォルトの名無しさん
2007/10/29(月) 21:34:43だがそれがいい
0044デフォルトの名無しさん
2007/10/29(月) 22:07:24エミュするのめんどいんで、自力でなんとかしてくれ。
>>42
正確に数えたことないけど数十倍の時間がかかるはず。
根性でもう少し高速化できるかも知れんが、あくまで救済措置だからのう…
そんな所にエネルギー使いたくない。
0045デフォルトの名無しさん
2007/10/31(水) 03:47:24こいつらのせいで、毎回チェックサムの異なるバイナリが生成されてしまいます・・・。
0046デフォルトの名無しさん
2007/10/31(水) 04:11:290047デフォルトの名無しさん
2007/10/31(水) 04:27:420048デフォルトの名無しさん
2007/10/31(水) 04:29:320049デフォルトの名無しさん
2007/10/31(水) 04:32:55はムリ?
0050デフォルトの名無しさん
2007/10/31(水) 04:36:470051デフォルトの名無しさん
2007/10/31(水) 04:50:28それでも __DATE__ とかには効かないかもしれないけどね。
0052デフォルトの名無しさん
2007/10/31(水) 06:01:50#undef __DATE__
#define __DATE__ "2007/10/31"
#endif
0053デフォルトの名無しさん
2007/10/31(水) 12:12:54gcc -U__DATE__ -D__DATE__=\"hoge\" でいいだろ。
0054デフォルトの名無しさん
2007/10/31(水) 18:09:140055デフォルトの名無しさん
2007/11/02(金) 13:37:570056デフォルトの名無しさん
2007/11/06(火) 05:57:27http://kerneltrap.org/Linux/Fixing_Compiler_Misoptimizations
0057デフォルトの名無しさん
2007/11/07(水) 01:33:130058デフォルトの名無しさん
2007/11/07(水) 16:03:540059デフォルトの名無しさん
2007/11/08(木) 01:21:07まだ最適化のステージがgccには及ばない部分もあるかもしれない。
まだちょっとバグがあるけど、もう一歩で実用的になりそうな気配が。
結構appleがコミットしてるな。
offline optimizationとやらがいまいちよくわからないけど、
apiで簡単に使えるようなフレームワークがあるのかな?
llvm-gccで直にコンパイルしたらバイナリサイズが結構でかいんだが、
中に実行時最適化の為のコードが入ってるのかな。
どういう手順で使うのが普通なんだろ。
0060デフォルトの名無しさん
2007/11/08(木) 01:50:43ちょうどなんかフロントエンド向けのチュートリアルがupされた模様。
0061デフォルトの名無しさん
2007/11/08(木) 01:58:46compile-timeでもlink-timeでもない。
インストールした直後とか、利用者に指示された時。
0062デフォルトの名無しさん
2007/11/09(金) 18:40:120063デフォルトの名無しさん
2007/11/09(金) 19:35:45stage2でerrorになるのだが…
どうも、stage1で作ったxgccの動作確認で失敗してるみたい。
空のmain関数だけのtpをxgccでcompileして実行するとseg. faultで落ちる。
生成したアセンブリを見ると、spを変な値に設定してるようだ。
0064デフォルトの名無しさん
2007/11/10(土) 12:03:130065デフォルトの名無しさん
2007/11/12(月) 02:09:17-mtune=k7
とか、mtune指定するとダメなやつもあったり
そもそも-marchやるだけでダメなやつもあったり
-targetとか、あそこらへん指定すると cannot build executable とか出くさるものもあったり
0066デフォルトの名無しさん
2007/11/12(月) 20:43:38無効化できないものでしょうか?
0067デフォルトの名無しさん
2007/11/12(月) 21:39:39ふつうはOSの機能なんじゃないの?
0068デフォルトの名無しさん
2007/11/12(月) 21:41:350069デフォルトの名無しさん
2007/11/13(火) 17:21:26segmentation faltとかならgdbで場所を把握できるんですが,
exitで普通に終わってしまって..
0070デフォルトの名無しさん
2007/11/13(火) 17:37:520071デフォルトの名無しさん
2007/11/13(火) 18:29:12(gdb) b exit
(gdb) b _exit
では止まらないと申すか。
0072デフォルトの名無しさん
2007/11/16(金) 17:40:13#include <sys/types.h>
int main(void) { printf("%d\n",sizeof(size_t)*8; return 0; }
例えば上のようなプログラムでは
/usr/include/libのどのファイル使って実行ファイルを
作成するんでしょうか
できれば調べ方なんか知りたいですが
0073デフォルトの名無しさん
2007/11/16(金) 18:00:07gcc -v foo.c とか、
ldd 実行ファイル とか
0074デフォルトの名無しさん
2007/11/16(金) 19:04:28リンカにマップを吐かせると...
0075デフォルトの名無しさん
2007/11/17(土) 01:31:03OSはFreeBSD6.3-PRERELEASEで、C言語の勉強をしていました。
ソースは酷い有様なのでエラーが多発するのは分かるのですが、
何かいつもと違うメッセージが出まして・・・。
最後の3行が(手書きですが)
cc: Internal error: Segmentation fault: 11 (program ld)
Please submit a full bug report.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
と書いてありました。
これってどうしたら良いでしょうか。
放っておけば良いとは思うのですが、気になったものでして。
007675です
2007/11/17(土) 02:44:26コマンドを間違えて打っていました。
いつもは
cc -o (実行ファイルの名前) (ソースファイル)
で打っていたのですが今回
cc (実行ファイルの名前) (ソースファイル)
と打ち込んで実行していました。
お騒がせしました。
0078デフォルトの名無しさん
2007/11/18(日) 10:31:12何がリンクされたか一目瞭然じゃん
0079デフォルトの名無しさん
2007/11/18(日) 12:19:240080デフォルトの名無しさん
2007/11/18(日) 17:31:38個人的には常に後者を使ったほうがわかりやすいと思うんですけど
なんでライブラリなしのオプションがGCCにあるのでしょう?
0081デフォルトの名無しさん
2007/11/18(日) 17:39:45単にライブラリをリンクするだけじゃ対応できない部分があるので、
gcc的にもちゃんとthreadをサポートしてくれる(かもしれない)オプション。
0082デフォルトの名無しさん
2007/11/18(日) 18:31:14実際に試してみれば判るけど、若干できたバイナリに違いがあるから
特に指定のない限り-pthreadの方がいいと思われる。
0083デフォルトの名無しさん
2007/11/18(日) 18:40:24gccはスレッドローカル変数とかあって、
ライブラリに全部頼るわけにいかない部分もあるし。
0084デフォルトの名無しさん
2007/11/18(日) 20:23:57ま、infoにも詳しい情報ないししょうがないとは思うがw
0085デフォルトの名無しさん
2007/11/18(日) 20:38:290086デフォルトの名無しさん
2007/11/18(日) 20:45:18#include <pthread.h>と-lpthreadで全て済んでしまう。
0087デフォルトの名無しさん
2007/11/18(日) 20:45:45gcc的にも、というだけじゃなくOS(ライブラリ)的にもだけど。
>>85
gccで-pthreadまたは-pthreadsオプションがあるOSは
Linux, Darwin, *BSD, System V, HP-UX, AIX, Solaris
があるが、これら全て出来損ない? w
0088デフォルトの名無しさん
2007/11/18(日) 20:52:13完璧なOSはWindowsのみ
0089デフォルトの名無しさん
2007/11/18(日) 21:11:55と
つけないと正常に動作しない、
は全然違うぞ。
んで、出来ソコナイはどれ?Linuxは違うな。
0090デフォルトの名無しさん
2007/11/19(月) 00:14:110091デフォルトの名無しさん
2007/11/19(月) 01:30:12OSじゃなくてarch依存じゃなかったか。
それと、gccのinfoにはプリプロセサとリンカにマルチスレッドプログラムのコンパイルを行なっていることを伝えるオプションだと書いてあるだけで、実際に何が変化するのかは書いてなくない?
-D_REENTRANTとの関係も教えてくれ。i386のLinuxの話でいいから。
0092デフォルトの名無しさん
2007/11/19(月) 01:37:08>>87 には無理そうだが。
0093デフォルトの名無しさん
2007/11/19(月) 09:38:340094デフォルトの名無しさん
2007/11/19(月) 14:48:55009580
2007/11/20(火) 11:24:03レスをくれた人どうも。
とりあえずi386 GNU/LinuxのGCC -pthreadすると
プリプロセサで#define _REENTRANT 1が定義されますね。
あとはリンカで-lpthreadやってるだけなのかなあ。
0096デフォルトの名無しさん
2007/11/20(火) 11:28:40「pkgconfigとlibtoolの悪」
http://udrepper.livejournal.com/19395.html
で、-pthreadしてると-Wl,--as-neededが効かなくなるぞって話です。
で、pkgconfig/*.pcを検索してみたら-pthreadをしてるのはQt関連とgthreadだけ。
だったら、-pthreadを-D_REENTRANT -lpthreadで置き換えられないかなあ
と思って聞いたわけです。
ただ、たとえそうしてもLDFLAGS=-Wl,--as-neededをやるとコンパイルできない
プログラムなんかもあったりして不思議ですが。
0097デフォルトの名無しさん
2007/11/20(火) 16:57:23Linuxのmanでは「-pthread」はFreeBSD固有のオプションってなってるけど。。。
0098デフォルトの名無しさん
2007/11/20(火) 19:09:19偏屈なmanだな。
OSXでman gccしたらRS/6000andPowerPCのオプションに書いてあるな。
i386にはないんだろうか。
0099デフォルトの名無しさん
2007/11/20(火) 19:56:01Fedora 8に入ってるmanを見てみました。
gcc-4.1.2のマニュアルだと、
IA-64 Option, RS/6000 and PowerPC Options, SPARC Options
に書いてあります。
FreeBSD固有って書いてあるのは、Linux日本語manだけど、gcc-2.95.3の翻訳だから今となっては古い。
0100デフォルトの名無しさん
2007/11/21(水) 00:06:240101デフォルトの名無しさん
2007/11/21(水) 13:55:08ただGPLがらみでgcc止めるとか言い出している人いるから、
また諸々ぐだぐだになるかも。
■ このスレッドは過去ログ倉庫に格納されています