トップページ⇒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
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
0253デフォルトの名無しさん2008/02/06(水) 07:53:05
r300って、MIPSの何かかと思ってしまった。。R800でもいいけど。
0254デフォルトの名無しさん2008/02/06(水) 09:43:58
>>253
> R800でもいいけど。

懐かしいね
0255デフォルトの名無しさん2008/02/06(水) 12:29:30
>>252
なんか最近、wxの・・・更に言うならwx-configの話題をよく見かけるな
どこかで流行ってるのかね
0256デフォルトの名無しさん2008/02/09(土) 23:35:10
GCCで、どこからも参照されていない関数を除去するオプションを探しています。
VC++でいうとプロパティ -> リンカ -> 参照の「参照されないデータを除去する」です。
GCCのバージョンは4.2.2で、組み込み向けのクロス環境です。
0257デフォルトの名無しさん2008/02/10(日) 00:08:40
それはgccじゃなくてリンカldの仕事。VC++でもリンカliの仕事。
んで、--as-neededがそれなのかな?よく知らないいけど。
gccから渡すには、-Wl,LFLAGSのようだけど。
0258デフォルトの名無しさん2008/02/10(日) 00:11:14
スタティックリンクしてるのかな?

正直スタティックリンクまわりは普段使ってないのでどうにも...
0259デフォルトの名無しさん2008/02/10(日) 01:16:30
-ffunction-sections  あたりでggr
02602592008/02/10(日) 01:30:59
>>256
関数だけじゃなく、グローバル変数も除去したいなら、-fdata-sectionsも要るな。
「データ」って書いてあるので一応補足。

>>257
それは、ライブラリを必要に応じてリンクしろというオプションだから今は関係内ね。
ldに渡すのは--gc-sectionsだったかな。
02612562008/02/10(日) 01:45:00
>>260
-ffunction-sections -Wl,--gc-sectionsを試してみましたが、目立った効果は無いみたいです。
COFFなのが原因かもしれないです。
0262デフォルトの名無しさん2008/02/10(日) 01:50:37
COFFか。。それはよくわかんないな。
ELFのstatic linkでしか試したことが無い。
02632562008/02/10(日) 02:12:19
>>262
とりあえず地道に小分けにして対応することにします。
ありがとうございました。
0264デフォルトの名無しさん2008/02/10(日) 09:33:30
今更なんだけど、gccって、せっかく一旦yaccだかbisonだかを使う事にしたのに
また手書きのパーザに戻したらしいよね。なんでなんだろ?
普通にパーザジェネレータ使ってた方が、何かと便利だろうに。
0265デフォルトの名無しさん2008/02/10(日) 09:48:34
GCC全体じゃなくてC++のフロントエンドだけ。
C++がLALRでパースするのはキツい変態言語ってだけでは。
0266デフォルトの名無しさん2008/02/10(日) 10:25:44
つ http://citeseer.ist.psu.edu/cache/papers/cs/21998/http:zSzzSzwww.cosc.canterbury.ac.nzzSzACMchapterzSzNZCSPGzSzpaperszSzwalzTzcosc.canterbury.ac.nz.pdf/irwin01generated.pdf
02672642008/02/10(日) 13:25:54
サンクス。
なんか下のpdfの冒頭、凄いこと書いてるな。自然言語パーザの方がふさわしいって?
いや辞書片手に読んでるだけだから、誤読かもわからんけど。

まあ上手く動いてるなら、いいか。。。
できるだけ、へたな努力はしないで欲しいんだけどな。。。
つか、パーザジェネレータ使う方が「へたな努力」になってしまうって事?

・・・あれ?そうすると、「へたな努力」って何なんだっけ?
ちょっと電波板で独り言つぶやいてくる。
0268デフォルトの名無しさん2008/02/10(日) 13:40:19
>自然言語解析の分野で非常によく知られている富田法(GLR 法)が、
>従来のアプローチよりも C++ のパースに向いている事を発見した。

って書いてあるね。

GLR法
http://ja.wikipedia.org/wiki/GLR%E6%B3%95
0269デフォルトの名無しさん2008/02/10(日) 13:42:00
bison では GLR をサポートしているらしいが、
それでも bison は使えないんだろうか?
0270デフォルトの名無しさん2008/02/10(日) 15:38:05
あんまり変体過ぎて、パーザジェネレータの分野が活発になっているという…
0271デフォルトの名無しさん2008/02/10(日) 15:55:34
>>263
馬鹿げた方法だけど C++ なら全部ヘッダに inline で書く手もw
0272デフォルトの名無しさん2008/02/10(日) 18:27:31
>>268
C++って、自然言語に匹敵しかねないほど文法が複雑ってことか……
0273デフォルトの名無しさん2008/02/11(月) 01:16:46
Walter タンが D を作りたいと思った気持ちが分かるな。
0274ストラウストラップ2008/02/11(月) 01:21:57
ハゲって言った奴は誰だ!
0275デフォルトの名無しさん2008/02/11(月) 05:16:32
びよ〜ん

びよんびよ〜ん
0276デフォルトの名無しさん2008/02/11(月) 07:05:28
しゅと・ら・うすらっぷ
0277デフォルトの名無しさん2008/02/11(月) 10:33:40
すっぽすっぽ
0278デフォルトの名無しさん2008/02/19(火) 05:32:13
来週にはRCビルドが始まるそうな。arch=core2にwktk
0279デフォルトの名無しさん2008/02/19(火) 23:01:13
てかいまも使えるよ
0280デフォルトの名無しさん2008/02/21(木) 09:49:07
llvmだいぶ速くなったものもあるみたいだけど、どうですか?
0281デフォルトの名無しさん2008/02/21(木) 10:13:14
どうですか(笑)
0282デフォルトの名無しさん2008/02/26(火) 01:44:12
gccをFPGAで作った自作のCPUに対応させたいんだけど、
binutilをいじればいいの?

何か参考になる書籍があれば教えて。
0283デフォルトの名無しさん2008/02/26(火) 06:22:39
まずはgccintだろう。
0284デフォルトの名無しさん2008/02/26(火) 13:44:23
>>283
ありがとう
0285デフォルトの名無しさん2008/02/29(金) 02:16:52
4.4forkしますた
0286デフォルトの名無しさん2008/03/02(日) 00:53:35
gdbについて聞きたいんですが、
fork()のとき、どっちのプロセスも追っていきたい
ときってどうすればいいんでしょうか?

ただしソースコードはいじれないとします。
0287デフォルトの名無しさん2008/03/02(日) 03:01:44
もういっこgdb起動してアタッチ?
0288デフォルトの名無しさん2008/03/05(水) 03:54:21
GCCのマニュアルを読んでみると、-O1は -fauto-inc-decから-funit-at-a-timeまでの24つのフラグを有効にするとあるので
bzip2を-O1でコンパイルしたバイナリと、-fauto-inc-dec以下24つのフラグでコンパイルしたバイナリとで、
同一のファイルを圧縮するのにかかる時間を比較したところ、同等の結果が得られませんでした。
-fauto-inc-dec以下24つのフラグでコンパイルしたバイナリは、何も最適化フラグを与えずにコンパイルしたバイナリと
同程度の結果になりました。どうしてこの様な結果になるのでしょうか。
http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options

0289デフォルトの名無しさん2008/03/05(水) 05:51:10
>>288
「-Oは以下の最適化フラグを有効にする」と書いてあるけど、それしか
しないとは書いてない。
gccのソースを見ると、「最適化レベルが1以上なら〜」というコードが
けっこう見付かるはず。
0290デフォルトの名無しさん2008/03/05(水) 11:59:59
>>288
各最適化オプション -fxxx は -O が前提となってたりする。
だから -O 指定せずに -fxxx 指定して効果がなくてもそんなもの。

最適化フラグ指定でんでんはGCCのソース嫁


でんでん…
0291デフォルトの名無しさん2008/03/05(水) 12:02:04
で...云々
0292デフォルトの名無しさん2008/03/05(水) 13:28:35
まさか、「云々」を「でんでん」と読んでたりしないだろうな。
0293デフォルトの名無しさん2008/03/05(水) 13:32:22
>>292 本当ならガイシュツ並に痛い気がする。
0294デフォルトの名無しさん2008/03/05(水) 13:46:50
ここは痛いインターネッツでつね
0295デフォルトの名無しさん2008/03/05(水) 14:48:23
「ガイシュツ」と同じくネタのつもりなんだろうけど、わざわざ読みに
くく書くのは個人的には嫌いだ。
0296デフォルトの名無しさん2008/03/05(水) 22:58:23
何年も前のネタでも反応が初々しい。このスレの住人は可愛い
0297デフォルトの名無しさん2008/03/06(木) 01:59:27
>>288
実はディスクの方が律速で差が出なかったとか。

というかどうやって計って、どういう結果になったのか
書いてもらわんと難しいと思うわけで。

0298デフォルトの名無しさん2008/03/06(木) 11:22:03
4.3.0キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
ftp://gcc.gnu.org/pub/gcc/releases/gcc-4.3.0
0299デフォルトの名無しさん2008/03/06(木) 14:35:38
mirror貼れ
ftp://ftp.dti.ad.jp/pub/lang/gcc/releases/gcc-4.3.0/
0300デフォルトの名無しさん2008/03/06(木) 15:12:45
GNUをミラーしてるお近くのftpサーバへどうぞ、でいいんじゃないのか。
0301デフォルトの名無しさん2008/03/06(木) 16:07:59
snapshots見てたから気づかなかったぜ
0302デフォルトの名無しさん2008/03/06(木) 22:25:45
4.3の一番の売りは、主な数学関数をコンパイル時に展開してより最適化してくれるってことでOK?
0303デフォルトの名無しさん2008/03/07(金) 13:26:47
-march=core2 -mtune=core2でしょ
0304デフォルトの名無しさん2008/03/07(金) 16:13:38
geodeも忘れるな
0305デフォルトの名無しさん2008/03/08(土) 05:30:08
で、4.1より早いの?
じゃなきゃ糞だが
0306デフォルトの名無しさん2008/03/08(土) 06:24:09
gcc-4.3のバイナリ実行速度は、integerについてはgcc-4.1よりも速いし、バグの数もgcc-4.1よりも少ない。
0307デフォルトの名無しさん2008/03/08(土) 11:33:42
>>306
4.1から4.3で何が良くなったのか簡潔に頼む。
0308デフォルトの名無しさん2008/03/08(土) 11:39:08
ggr (3バイト)
0309デフォルトの名無しさん2008/03/08(土) 19:44:39
fate見ると4.3って4.1に比べて遅くなってるような。
4.1.2 http://fate.multimedia.cx/index.php?build_record=6158
4.2.3 http://fate.multimedia.cx/index.php?build_record=6169
gcc svn 133010, built 2008-03-07 http://fate.multimedia.cx/index.php?build_record=6163
0310デフォルトの名無しさん2008/03/08(土) 21:56:34
以前にベンチをnbenchとかbzip2とかで取ってみて比較した印象だと整数演算に関しては4.1より4.2の方が明らかに良いと
思っていて、最適化フラグが-O2の場合は4.2より4.3の方が若干良いという印象を持っていたのでそう書いたのでけど、
実は-O3の場合は事情が違って、4.2の方が4.3より良い結果になると思っています。つまり、
gcc-4.2-O2<gcc-4.3-O2<gcc-4.3-O3<gcc-4.2-O3
の順に性能が良くなると思っています。fateというベンチはstdout textを見ると-O3でコンパイルされているので
4.2の方が4.3より良い結果になるというのは順当だと思います。
0311デフォルトの名無しさん2008/03/08(土) 22:20:14
C++ヲタだから、あんまり速度比較には興味ないんだけど、
4.3はforward propagationが大幅に書き換えられているから、
4.2のの頃の結果から4.3の振る舞いを推測するのは危険だぞ。
0312デフォルトの名無しさん2008/03/09(日) 13:19:28
4.3.0今試してみたけどやっぱり4.1.2より遅いバイナリ吐いた
あくまで自分が使うプログラムでってことだけど
0313デフォルトの名無しさん2008/03/09(日) 18:47:18
速い遅い以前に挙動が変わっちゃって今トレース中だよ・・・
0314デフォルトの名無しさん2008/03/09(日) 23:34:14
それは十中八九 GCC のせいじゃない。
まあ、警告が不十分だった事に起因してる点があれば
30% 程度は GCC にも責任があるかもしれないが。
0315デフォルトの名無しさん2008/03/09(日) 23:35:17
>>307
http://gcc.gnu.org/gcc-4.3/cxx0x_status.html
Status of Experimental C++0x Support in GCC 4.3

Rvalue references N2118 Yes
Rvalue references for *this N2439 No
Variadic templates N2242 Yes
Static assertions N1720 Yes
Declared type of an expression N2343 Yes
Right angle brackets N1757 Yes
Default template arguments for function templates DR226 Yes
Extern templates N1987 Yes

C99 Features in C++0x
__func__ predefined identifier N2340 Yes
C99 preprocessor N1653 Yes
long long N1811 Yes

もちろんg++起動オプションでオンにしたときだけ。
http://gcc.gnu.org/gcc-4.3/changes.html
0316デフォルトの名無しさん2008/03/10(月) 00:37:24
>>314
まさかgccはlintにするために作ってるわけじゃあるまいに。なんだその30%て。
0317デフォルトの名無しさん2008/03/10(月) 19:19:11
Linuxで最近よく自分でアプリやカーネルをmake installします。gccの最適化フラグをつけないとつけた時に
比べてやはり遅いんだなってのは体感しました。所がアプリによりつけたフラグによっては動きが悪くなる
ってのも体感。

なので自分はソースが読めないのでgcc4.2シリーズの-march=native -O2のみにして全部これでやることに
しました。それなりに快適に動いてます。

少し前からgcc4.3の最適化は4.2よりいいと書いてある記事をみて開発版の4.3を入れたけど
なんか動きがかなり違う。コンパイルが出来ない(一切フラグをつけなくても)物も出てきた。

それどころかある設定をしないとカーネルでさえコンパイル出来ないんですね・・・・
ググってカーネルのmakeファイルに設定を追加して出来上がった物も動きが悪いです・・・
やはり今回の正式リリースもカーネルとかそのままコンパイル出来ないんでしょうか?

まあ、それは対策が解るからいいものの、使った感じちょっとソースが読めないような自分が使う物ではないな
と感じたです。コンパイルエラーが出たのをネットでググる時間が(TT)
0318デフォルトの名無しさん2008/03/10(月) 20:08:32
ソース読めない、情報拾うのが涙目、って状態で開発版を入れる神経が理解できない。
0319デフォルトの名無しさん2008/03/10(月) 20:14:00
>>318
じゃあ正式リリース版のgcc4.3.0では何もいじらなくてカーネルコンパイルくらいは平気で出来るの?
4.2シリーズは開発版だろうがまるで神経使わなかったけど。
0320デフォルトの名無しさん2008/03/10(月) 20:15:00
じゃあ(笑)
0321デフォルトの名無しさん2008/03/10(月) 20:17:07
>>320
答えられないような人は黙っててよww
0322デフォルトの名無しさん2008/03/10(月) 20:28:23
>>319
開発版を入れる神経を疑いはするが、4.3が安定しているかどうかは知らない。
私ゃ態々カーネルをコンパイルし直すほど暇じゃないんでね。
0323デフォルトの名無しさん2008/03/10(月) 20:39:37
そうそう体感できるものでもないだろ
0.3秒かかってたのが0.27秒とかになったとしても
0324デフォルトの名無しさん2008/03/10(月) 21:15:34
どうせGentooユーザなんだろうなぁ
0325デフォルトの名無しさん2008/03/10(月) 22:08:50
春厨だよ
0326デフォルトの名無しさん2008/03/10(月) 22:27:47
>>322
安定とかの問題以前でgccサイドとカーネルサイドの意見が違っててどっちも直さないってのが
ある筈なんだけど・・・

gcc4.3、カーネルと聞いて思い浮かばないようならもう話はいいですww
0327デフォルトの名無しさん2008/03/10(月) 23:07:27
「ある筈なんだけど」っていう程度の人は、
リリースされたばかりのコンパイラを使わない方がいいと思うよ

> やはり今回の正式リリースもカーネルとかそのままコンパイル出来ないんでしょうか?

あなたにはよく分からないことだから。
0328デフォルトの名無しさん2008/03/11(火) 00:04:11
すいませんちょっとお尋ねしたいのですが、
コンパイル時に二つのオプションを使うことってできるのでしょうか?
例えば、若干スレ違い臭いのですが、質問させてください。

例えば、
`wx-config --cppflags` と `pkg-config --cflags gtk+-2.0`
を同時に使いたいのです。

同時に使えるとしたらどのように書けばいいのでしょうか。
どなたかご教示頂けると幸いです。
03293282008/03/11(火) 00:05:15
3行目コピペミスなので無視してください・・
0330デフォルトの名無しさん2008/03/11(火) 00:10:10
別スレでレスがつかなかったからこっちで・・・とか
そのくらいの経緯は書いて欲しいな。
というか、向こうでレスついたぞ。
03313292008/03/11(火) 00:16:00
>330
すいません、そういうもんなのですか。以後気をつけます。
レスついたみたいですね。ありがとうございましたm(_ _)m
0332デフォルトの名無しさん2008/03/11(火) 01:48:36
ん?GTK+スレでもwxスレでもないどこかなのかな?ま、いいか
0333デフォルトの名無しさん2008/03/11(火) 02:30:21
4.3でカーネルがビルド出来ないというのは、これです。
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32044#c28
0334デフォルトの名無しさん2008/03/11(火) 02:33:55
カーネルに限らず、O2レベルでもミスコンパイルはよくあるから別に驚く話でもないが。
GCCコミッテーに文句つけて今の版のバグフィックスをしろよ、クソハゲドモと外人に文句垂れてくるんなら
俺は得に気に留めないよ。
0335デフォルトの名無しさん2008/03/11(火) 02:38:16
方向の違うこういうのもあるから、素人さんにはお勧めしない。
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e40cd10ccff3d9fbffd57b93780bee4b7b9bff51

正直、コンパイル猿になるよりもずっと有意義なことがいくらでもあります。
何か一つターゲットを絞って深く追ってみるのならいいけどね。
0336sage2008/03/13(木) 10:12:58
int result;
__asm__ (
"imull %%edx\n\t"
"idivl %3\n\t"
: "=a" (result) /* out */
: "a" (m1), "d" (m2), "g" (d) /* in */
: "ax", "dx" /* mod */
);
return result;
}
でコンパイルするとcan't find a register in class ‘AREG’ while reloading ‘asm’とのエラーが表示され、コンパイルできません。
どのように改善したら良いでしょうか。
■ このスレッドは過去ログ倉庫に格納されています