トップページ⇒tech
1001コメント281KB

GCCについて part8

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/10/13(土) 00:07:39
史上最強かもしれないツール、GCC(GNU Compiler Collection)について語るスレ。

GNU本家の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
0153デフォルトの名無しさん2007/12/20(木) 15:19:01
__GNUC__
__GNUC_MINOR__
__GNUC_PATCHLEVEL__
0154デフォルトの名無しさん2007/12/20(木) 15:21:44
#if defined( __GNUC__ )
#if ( __GNUC__ >= 4 )

かな
0155デフォルトの名無しさん2007/12/20(木) 22:11:00
>>152
>>153
>>154

ありがとうございました。助かりました。
0156デフォルトの名無しさん2007/12/23(日) 01:06:10
IntelのCコンパイラだとデフォルトでは>>153をdefineしている(オプションで変更可)
特殊かもしれんが
0157デフォルトの名無しさん2007/12/23(日) 04:28:24
RHLE version3 のサポートが終了してしまうので、
gcc 2.9.6
gcc 3.2.3
から、
RELE version5のgcc 4..xに変更したんだけど、コードの修正メンドくせー、
互換性無いのって悲しいね。

0158デフォルトの名無しさん2007/12/23(日) 09:31:31
×互換性が無い
○コードが汚い

ザルだった文法チェックに救われていただけ
0159デフォルトの名無しさん2007/12/23(日) 10:01:11
普通に書いていれば修正なんてほとんど要らんだろ
0160デフォルトの名無しさん2007/12/23(日) 10:36:37
>>157じゃないが、
Cだとgccの移行は簡単だけど、C++だと悲惨。
2->4なんて。

コンパイルエラー/ウォーニングになるのはいいけど、
コンパイラが検出できない奴など。
例えばlookupのルール変更とか。
ADLは便利だけど、難しいから。
0161デフォルトの名無しさん2007/12/23(日) 17:53:45
>>160
馬鹿コーディングだから移行が難しいんだよ。
俺も新人だった頃の自分のコードを呪ったよ。
きちんとしたコードはすぐ移行できた。
01621572007/12/23(日) 23:53:40
確かにコードが汚いことが原因で

トークンの連結
型(int -> bool)
プロトタイプ宣言

関係が9割超
0163デフォルトの名無しさん2007/12/30(日) 00:12:03
precompiled headerって全然流行らないね。信用できるのこの機能
0164デフォルトの名無しさん2007/12/30(日) 00:37:49
意外と使われてるのに…
0165デフォルトの名無しさん2008/01/07(月) 09:31:10
http://gcc.gnu.org/ml/gcc/2008-01/msg00023.html
バグ潰し終わらねー感じ

使ってみてもICEとかc++のスコープとか色々おかしい印象がある
開発者がんばってくれー
0166デフォルトの名無しさん2008/01/08(火) 02:18:54
>>165
mudflapというオプションを初めて知った。 ひで〜ネーミングだな。
0167デフォルトの名無しさん2008/01/15(火) 18:42:33
速度云々を無視しよう
という条件下だと、fPICって常に付与してていいもんなのか?
0168デフォルトの名無しさん2008/01/15(火) 23:54:54
gcc(3.4)でSJISファイルのコンパイルでうまくいかないので、ご教授いただけたらと思います。

> cat a.c
#include "stdio.h"
#define AAA(a) BBB(#a)

void BBB(char *str) {
printf("%s\n", str);
}

int main() {
AAA(あ"い");
BBB("あ\"い\"");
}

> gcc --input-charset=cp932 --exec-charset=cp932 a.c
> a.out
あ"磚
あ"い"

AAAの方とBBBの方で両方同じ結果が得られそうなのですが、
AAAの方でうまくいっていないのを解決したいと思っています。

ここでは標準出力していますが、内部文字コードはSJISのまま解決したいと思っています。
よろしくお願いいたします。
0169デフォルトの名無しさん2008/01/16(水) 08:04:12
CスレでGCCの範囲だから、すれ違いと言われてここに来ました。
http://homepage2.nifty.com/m_kamada/fractalp.htm#mandelbmp_c
のサイトにある、complex.hを読んでいるんですが、
gccでマクロを展開してここのソースを読むと、
/* setjmp(cjmpenv)の返却値 */
#define C_DIVIDE_BY_ZERO 1 /* 0で除算しようとした */
#define C_ARG_ZERO 2 /* 0の角度を求めようとした */
略
#endif
#if __GNUC__==2
#define complex __complex__
#define Re(z) (__real__ (z))
#define Im(z) (__imag__ (z))
#else
typedef struct {
double re;
double im;
} complex;

などごっそり書いてあった部分が、
/* setjmp(cjmpenv)の返却値 */
# 24 "complex.h"
typedef struct {
double re;
double im;
} complex;
# 77 "complex.h"
/* xの実数部にsを加える */
# 89 "complex.h"
/* xの虚数部にsを加える */
と、# 24 "complex.h"や# 77 "complex.h"などに置き換えられているようです。
この#24や#77はどういう意味なのでしょうか?
0170デフォルトの名無しさん2008/01/16(水) 08:25:47
>>168

3.4では化けるね
4.2.2だと化けなかった
0171デフォルトの名無しさん2008/01/16(水) 08:26:18
それと、
「複素数値を持つ式 exp から実数部を抽出するには、
__real__ exp と書きます。同様に、虚数部を抽出するには __imag__ を使います。これはGCCの拡張である。」
とあり、printf("b=%d + %d I¥n", __real__ exp, __imag__ exp); で複素数表示出るのですが、
コレは__real__ という関数名なのでしょうか?
でも関数だと( )が必要だし....
そもそも__みたいな変な名前のマクロをどういう意図で作ったのでしょうか?
complex.hを見ても良くわかりませんでした。
__のような物がつくプログラムを見たのが初めてで、非常に理解に苦しんでいます。
0172デフォルトの名無しさん2008/01/16(水) 11:22:26
>>169
マクロ展開前の行番号。コンパイル時にエラー行を表示するためにそう
いう情報を残す必要がある。

>>171
sizeof と同じような形式の演算子だと思えばいいんじゃない?
__は単に名前の一部。

0173デフォルトの名無しさん2008/01/16(水) 12:18:35
普通の名前と喧嘩しないように __ を付けるのは慣例
0174デフォルトの名無しさん2008/01/16(水) 12:25:52
慣例じゃなくて予約されているんだが
0175デフォルトの名無しさん2008/01/16(水) 12:42:41
>>172,173,174
お返事有り難うございます。
>普通の名前と喧嘩しないように __ を付けるのは慣例
>慣例じゃなくて予約されているんだが
確かに__って普通の変数には付けないですからね。
どうも有り難うございました。
0176デフォルトの名無しさん2008/01/16(水) 13:09:02
あ失礼,そうだった.<慣例
0177デフォルトの名無しさん2008/01/16(水) 13:10:14
書き方おかしかった.<慣例,じゃなくて<予約
スレ汚しすまん
0178デフォルトの名無しさん2008/01/17(木) 01:56:01
gdb+gccなんですがクロスコンパイルしてます。
Aでコンパイル
Bで実行。

Bで、はいたコアダンプを冢ってgdbを使いたい場合は
Aでmakefile(自動生成)使ってまっす。

どうしたら、ディレクトリ構造とか再現してソース追っかけながらデバッグできますか?
makefileに答え有りますか?
0179デフォルトの名無しさん2008/01/17(木) 02:03:30
Bで、はいたコアダンプを冢ってgdbを使いたい場合はどうしたら良いですか?

文が変だた
0180デフォルトの名無しさん2008/01/17(木) 02:04:18
>>178
Bでgdbserver走らせるのが一番楽じゃない?
0181デフォルトの名無しさん2008/01/17(木) 02:08:28
>>180
おとなの事情というか会社の事情で無理なんです
01821812008/01/17(木) 02:30:08
少し確認ですが
Aにもgdbserverがデーモンのように動く必要ありますか?
Bにも同じgdbserverが必要ですよね?

Aで負荷高くなりそうですね
0183デフォルトの名無しさん2008/01/17(木) 03:33:23
>>180
あ、ごめん、コアの話しか。 そういう機能はgdbserverにはないね。
0184デフォルトの名無しさん2008/01/17(木) 16:43:02
だめだ。
__real__って何なんだ?
関数ではないしcomplex.hにも定義されていない。
gcc機能拡張ってのがよくまずわからない。
特殊な演算子なんですか?

0185デフォルトの名無しさん2008/01/17(木) 16:50:58
>>184
わからないなら自前の構造体定義すれば?
0186デフォルトの名無しさん2008/01/17(木) 17:06:00
>>184
何をわかる必要があるというんだろう。sizeof だってどこかのヘッダで
定義してあるわけじゃないけど使えるでしょ?

infoの説明はこれだけしかないけど、これで十分つかえるじゃないか。
> To extract the real part of a complex-valued expression EXP, write
> `__real__ EXP'. Likewise, use `__imag__' to extract the imaginary
> part.
0187デフォルトの名無しさん2008/01/17(木) 17:06:53
>>184
http://www.asahi-net.or.jp/~wg5k-ickw/html/online/gcc-2.95.2/gcc_4.html#SEC72
0188デフォルトの名無しさん2008/01/23(水) 22:06:35
ttp://gcc.gnu.org/ml/gcc/2008-01/msg00387.html
GCC 4.3 もリリースモードへ突入
0189デフォルトの名無しさん2008/01/26(土) 10:38:15
みんなGDBを使ってデバッグしてるの?
それともprintf?
0190デフォルトの名無しさん2008/01/26(土) 12:07:11
うかつに手を出せないところはInsight使ってるけど
printfの方が早いな
0191デフォルトの名無しさん2008/01/26(土) 15:55:53
printfで場所を大まかに限定してソースとにらめっこ
ドコでも使えて簡単だから…
0192デフォルトの名無しさん2008/01/26(土) 16:15:01
んで core 吐いたら gdb
0193デフォルトの名無しさん2008/01/26(土) 18:11:31
printfってプログラム埋め込み?
debuggerのbreakpointsでprintfするんじゃなくて?
埋め込みなんてここ5年くらいやったことないわ。
0194デフォルトの名無しさん2008/01/26(土) 19:12:44
デバッグトレースした方が便利な事もあるぜ。
0195デフォルトの名無しさん2008/01/27(日) 01:52:18
デバッグトレースって何さ
0196デフォルトの名無しさん2008/01/27(日) 02:09:06
デバッグ時のみ文字列出力。
0197デフォルトの名無しさん2008/01/27(日) 02:13:55
社内用語乙。
0198デフォルトの名無しさん2008/01/27(日) 02:22:41
デバッグトレース の検索結果 約 3,320 件
0199デフォルトの名無しさん2008/01/27(日) 13:40:49
でもまー、ふつー「バックトレース」
0200デフォルトの名無しさん2008/01/27(日) 13:43:31
違った。

つか「デバッグトレース」って、デバッグ目的のトレース実行とか、
呼び出し順の出力のことじゃね?
0201デフォルトの名無しさん2008/01/27(日) 14:10:36
「光ファイバーチャネル」みたいなもんだな。
0202デフォルトの名無しさん2008/01/27(日) 15:47:47
TRACE(_T("Debug trace\n"));
0203デフォルトの名無しさん2008/01/27(日) 18:41:45
>>202
それなんですか?
0204デフォルトの名無しさん2008/01/27(日) 18:44:02
MFC だな
0205デフォルトの名無しさん2008/01/27(日) 18:44:42
MFCって、GCCで使えるんですか?
0206デフォルトの名無しさん2008/01/27(日) 18:44:58
mingw で使えるんじゃね?
0207デフォルトの名無しさん2008/01/27(日) 18:47:27
お前ら、4.3の話でもしようぜ
0208デフォルトの名無しさん2008/01/31(木) 08:26:24


とりあえず「ミングダブリュー」って言うな。



0209デフォルトの名無しさん2008/01/31(木) 08:33:44
明w
0210デフォルトの名無しさん2008/01/31(木) 14:46:43
ミングダブリューさんじゅうにって読んでた
ミンジーダブリュー?
0211デフォルトの名無しさん2008/01/31(木) 14:54:59
ミンジーダブリューって読んでた
0212デフォルトの名無しさん2008/01/31(木) 15:57:19
ミングウだろ・・・常識的に考えて・・・
0213デフォルトの名無しさん2008/01/31(木) 16:07:33
http://ja.wikipedia.org/wiki/MinGW
>MinGWの規範となる発音は未だ決定されていないが、一般的には、
>"ming wee", "min gee double-u","ming double-u" or "min gnu"
>などのように発音されている。
いい加減なもんだよな…
0214デフォルトの名無しさん2008/01/31(木) 18:00:39
みんな MinGW の読み方には苦労してんのね
0215デフォルトの名無しさん2008/01/31(木) 18:10:40
みんぐぅ
0216デフォルトの名無しさん2008/01/31(木) 19:56:54
ミンジーダブリューだろ・・・常識的に考えて・・・
0217デフォルトの名無しさん2008/01/31(木) 20:09:07
ゴールデンウィーク最小
0218デフォルトの名無しさん2008/01/31(木) 22:15:04
みんぐうぃん
0219デフォルトの名無しさん2008/01/31(木) 22:19:04
エムアイエヌジーダブリューだろ・・・常識的に考えて・・・
0220デフォルトの名無しさん2008/02/01(金) 00:27:13
そういやいつからMingwinからMinGWになったん?
前は「みんぐぃん」て発音できたが今のは悩む・・・
0221デフォルトの名無しさん2008/02/01(金) 00:55:58
つまり
みにまりすとぬーふぉーういんどーず
と読むと?
0222デフォルトの名無しさん2008/02/01(金) 00:57:21
マゾ イン ゴールド ウォーターって読んでたわ・・・
0223デフォルトの名無しさん2008/02/01(金) 06:29:39
MGW
0224デフォルトの名無しさん2008/02/01(金) 07:54:17
みんぐw
0225デフォルトの名無しさん2008/02/01(金) 09:09:52
ゴールデンウィークが最小限な事。
また、それを嘆くさま。
0226デフォルトの名無しさん2008/02/01(金) 16:20:09
みんぐー
0227デフォルトの名無しさん2008/02/01(金) 17:30:48
お前ら、4.3の話でもしようぜ
0228デフォルトの名無しさん2008/02/01(金) 19:12:49
今年度中にリリースされる?
0229デフォルトの名無しさん2008/02/02(土) 10:21:55
February 1, 2008
GCC 4.2.3 has been released.
0230デフォルトの名無しさん2008/02/03(日) 23:00:40
すいません.質問させてください.

GCC のソースコードを読み解いて理解したいと思っているのですが,
手始めに,あるいはコードを解読する際のガイドとして読んでおくべき
書籍あるいはサイトで,有用なものとしてはどんなものがありますでしょうか?
英語でもまったくかまいません.
一応,自分が読んで理解したい部分は
C++ コンパイラの字句・構文解析部 (フロントエンド部と呼ぶようですけれど) です.
0231デフォルトの名無しさん2008/02/03(日) 23:47:28
茨の道じゃろうて・・・

コンパイラを作りたいか?カスタマイズしたいのか?
0232デフォルトの名無しさん2008/02/03(日) 23:54:56
GCCのすぱげっち読むよりはもうちょっとマシなものありそうだけど。
02332302008/02/04(月) 01:04:00
>>231
茨の道なのは重々承知のつもりでお聞きしています.
動機は最終的にはカスタマイズですけれど,
純粋に GCC の挙動を理解するだけでも得るものはあるかとは思っています.
0234デフォルトの名無しさん2008/02/04(月) 01:55:12
#pragma once
は今でも非推奨ですか?
0235デフォルトの名無しさん2008/02/04(月) 02:00:16
>>230,233
最終目標がGCCのカスタマイズなら、最初からGCCのソースを追えばいいかもね。

コンパイラの作り方を知りたいなら、ソースから読むのは学習効率が悪い。
ついでに、GCCはスパゲティだし大きいしで選択肢としても良くない。
もしまだ知らないなら、古典のdragon bookを読むとか、flex & bisonを触るとか
その辺からでは。最近の事情はわからんので、もっと手っ取り早い方法があるかも。

もしかして、GCCの最適化エンジンとかプロセッサ対応とかのバックエンド側を
いじりたいんではなく、フロントエンド側(入力言語)を拡張したいん?
GCCのドキュメントのどこかに一通り書いてありそうだが、漏れは知らんわ。すまん。
GENERICやGIMPLEを探ればいいんかな。
02362302008/02/04(月) 02:13:34
>>235
非常に参考になる意見ありがとうございます.

>もしまだ知らないなら、古典のdragon bookを読むとか、flex & bisonを触るとか
dragon book は持ってはいますが気合入れて読んだことがなかったです.頑張って精読します.
flex & bison も玩具程度の弄り方しか試してなかったので,ちょっと本気で触ってみます.

>もしかして、GCCの最適化エンジンとかプロセッサ対応とかのバックエンド側を
>いじりたいんではなく、フロントエンド側(入力言語)を拡張したいん?
はい,バックエンド側には今のところほとんど興味がありません.
最終的な目標はフロントエンド側 (入力言語……といいますか C++) の拡張です.
ただ,これはあくまで最終的な目標として設定しているだけです.
0237デフォルトの名無しさん2008/02/04(月) 02:42:19
なんかそういうプロジェクトをどこかで見たような
gccじゃなくて
0238デフォルトの名無しさん2008/02/04(月) 02:56:44
LLVM?
0239デフォルトの名無しさん2008/02/04(月) 11:11:06
>>237
> なんかそういうプロジェクトをどこかで見たような
> gccじゃなくて

COINS?
0240デフォルトの名無しさん2008/02/04(月) 11:24:34
入力言語をC++に変換するプリプリプロセッサを作るのが簡単のような
0241デフォルトの名無しさん2008/02/04(月) 13:41:11
NVIDIAのCUDAのコンパイラ(nvcc)が内部でgcc使っているみたいだ。
つまり、拡張仕様の入力から独自仕様の出力を得ている模様。
0242デフォルトの名無しさん2008/02/04(月) 15:55:42
Cell 用の spu-gcc もかなり弄ってるみたい
0243デフォルトの名無しさん2008/02/04(月) 16:55:04
>>236
まずyacc & bisonの勉強
次に http://gcc.gnu.org/readings.html , GCC-specific Literature
特にtoy example languageとRTL
C++拡張ということならOpenC++ (今はもう更新してないみたいだが)
02442302008/02/04(月) 20:11:15
GCC を弄る先例として色々見る価値のあるプロジェクトはあるみたいですね.

>>240
構文チェックなどについては GCC に実装されている部分を流用し,
interact させたいので,独立した preprocessing は今のところ考えていないです.

>>243
色々助言していただいて本当に助かります.
0245デフォルトの名無しさん2008/02/05(火) 01:21:21
質問させてください。
wxWidetsっていうのを使ってプログラミングしてるんですが、

g++ -o hello2 hello2.o `wx-config --libs`

みたいにやると

/usr/lib/gcc/i486-linux-gnu/4.1.3/../../../../lib/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'

って言われてしまい、コンパイルできません。何がいかんのでしょう??
これだけだと分からないと言われそうなのですが、ソースがちょっと長いので・・
でも参考サイトの指示通りに書いた簡単なプログラムなので、ソースじゃなくて何か基本的な設定とかが間違ってるんじゃないかと思ってここに来ました。
OSはubuntu7.1.0です。他のプログラムならコンパイル出来ている状態です。(やはりソースが間違ってるんでしょうか・・)
どなたかアドバイス頂けると幸いです。
0246デフォルトの名無しさん2008/02/05(火) 01:24:07
gccのフロントエンドはここのブログが参考になる。
http://alohakun.blog7.fc2.com/?all

ILogScriptがgcc4.xに対応してほしいぜ。
誰かやってくれよ。
0247デフォルトの名無しさん2008/02/05(火) 01:27:10
>undefined reference to `main'
0248デフォルトの名無しさん2008/02/05(火) 01:31:18
wo神ならなんとかしてくれる
02492452008/02/05(火) 04:35:12
すいません解決しました。やはりただのソースの問題でした。
247さんありがとうございましたm(_ _)m
0250デフォルトの名無しさん2008/02/05(火) 05:21:07
>>228
2月初旬の予定だそうだよ。
0251デフォルトの名無しさん2008/02/05(火) 19:35:15
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32544
未だにこれが直ってないのでr300の人はご注意を。
0252デフォルトの名無しさん2008/02/06(水) 01:48:52
>>245
またおまえかw
■ このスレッドは過去ログ倉庫に格納されています