GCCについて part10

■ このスレッドは過去ログ倉庫に格納されています
2011/09/03(土) 14:13:04.14
史上最強かもしれなかったツール、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について part9
http://hibari.2ch.net/test/read.cgi/tech/1246059290/

関連スレ
【最速へ】LowLevelVirtualMachine【LLVM】
http://hibari.2ch.net/test/read.cgi/tech/1211547655/
2011/12/09(金) 02:42:43.54
>>70
config.niceって初めて知った。
ググるとPHPやApacheで使われているもののように見えるけど、よくわからん。
2011/12/09(金) 17:49:05.22
>>70
head config.log
してたわ〜と思ったけどそんなファイルできないぞ
どうもautoconfの機能ではなく、configure.acに自分で処理書いて生成してるっぽいが
73デフォルトの名無しさん
垢版 |
2011/12/10(土) 23:10:38.16
SandyBridgeでg++ -march=native -mtune=native で作ったバイナリって
Core2とかじゃ動かないみたいなんだけど、どのオプションでどれで動くかって
表か何かない?
2011/12/11(日) 03:28:34.47
>>73
nativeだとAVX(-mavx)が入るからだろ
-march=core2にしたらいいよ
オプションはこれででる
ttp://d.hatena.ne.jp/ktomoya/20100510/1273510042
2011/12/11(日) 08:32:33.51
>>74
おぉ、サンクス。
ちなみに、MinGW/g++.exe (GCC) 4.6.1でこんなんでた。
-march=corei7-avx -mcx16 -msahf -mno-movbe -maes -mpclmul -mpopcnt -mno-abm -mno-lwp -mno-fma -mno-fma4 -mno-xop -mno-bmi -mno-tbm -mavx -msse4.2 -msse4.1 --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=8192 -mtune=corei7-avx
2011/12/11(日) 15:53:29.35
>>75
-mavx -msse4.2 -msse4.1 -maes -mpclmul -mpopcnt ...
などがCPUごとに実装状況が異なる命令を使うってオプションだから
SSE4.2やAVX、POPCNTなど最近できた命令に対応していないプロセッサだと動かない
-march=nativeはコンパイルしたマシンのプロセッサなどからこういうオプションを勝手に付けてくれるものだから
対応表とか作るとCPUのカタログになってしまうので
コンパイル済みのバイナリを別のマシンで実行したいならmarchやmtuneは指定しないか
対象が分かっているならその中で一番機能が少ないプロセッサに合わせて設定したほうがいいかと
2011/12/16(金) 21:45:35.33
普段Pythonを使っているんだけど、gcc on LinuxでCで何かの分野の処理をやるとしたら何の分野がいいかな?
コーディングがマゾい奴はやりたくない。うひょー、コーディング楽しいって感じの週末にしたい。
2011/12/16(金) 22:57:34.93
フィボナッチ数でも計算してろ
2011/12/17(土) 04:10:44.29
wxPython と wxWidgets のバインディングが出来るツールをおながいしまつ
2011/12/22(木) 10:18:33.81
windows7にしたらResource temporarily unavailableエラーが頻出するようになったんだけど
どういうことこれ
2011/12/22(木) 12:07:36.06
Cygwin使っているならCygwin固有の問題
2011/12/28(水) 14:50:50.96
問題だね(´・ω・`)
2011/12/31(土) 16:04:05.91
問題と思うから問題になる
問題と思わなければ問題ない
2012/01/01(日) 19:14:46.19
>>81
win7からメモリ管理の方式が変わったらしいし
たぶんメモリアクセスのコンフリクトだと思うんだけど
直し方がなあ
コンパイルするたびにがちゃがちゃとエラーで止まるのが非常にうざい
2012/01/02(月) 13:01:35.03
具体的に
何やったら、こうなった
って、かいてほしいな
2012/01/03(火) 12:16:02.83
Cygwin + MinGW + GCC 相談室 Part 6
http://toro.2ch.net/test/read.cgi/tech/1304609116/
というのがある。
2012/01/03(火) 13:21:45.30
4.6.1の情報はドコで手に入りますか?
2012/01/03(火) 20:06:07.38
tar玉に入ってるだろ
2012/01/05(木) 18:39:50.52
最適化しても助長なコードを吐くことがあるのを見つけちゃったよ
2012/01/05(木) 19:35:52.48
んではそのケース用peephole optimizationを.mdに追加してくれ
2012/01/05(木) 19:44:12.02
え、秘密にしてちゃ駄目かな?
2012/01/05(木) 23:33:57.20
助長してくれるならいいことじゃないか
2012/01/06(金) 00:22:32.22
転送先に書いて、転送先から同じレジスタに書き戻すことがある
で、わかりますか?
94デフォルトの名無しさん
垢版 |
2012/01/06(金) 14:47:54.30
ターゲット書かないのはターゲット非依存ってことなのか、今日日x86に決まってんだろうがってことなのか
2012/01/06(金) 15:14:17.60
複数archで確認してるよ、peephole2使って
2012/01/08(日) 22:17:08.34
以下のようなコードでコンパイルは通るのですが
実行した時の表示が
1
1
のようになってしまいます。
1
2
になるつもりで書いているのですが
変数の受け渡しはどうすればいいのでしょうか?
(円記号のところは本当はバックスラッシュになっています)

#include <stdio.h>

int test(a)
{
a = a + 1;
return a;
}

int main()
{
int a;
a = 1;

printf("%d\n",a);

test(a);

printf("%d\n",a);

return 0;
}
2012/01/08(日) 22:35:35.37
a=test(a);
2012/01/08(日) 22:52:02.15
#include <stdio.h>

void test(int *a)
{
*a += 1;
}

int main()
{
int a = 1;

printf("%d\n",a);

test(&a);

printf("%d\n",a);

return 0;
}
2012/01/13(金) 03:10:33.49
Commit: RX: Add return pattern
ttp://gcc.gnu.org/ml/gcc-patches/2012-01/msg00627.html
gcc/function.cの
HAVE_return
HAVE_simple_return
の場合分けが悪いだけなのにね

ここに書いても無駄だと思うけど、なんとなく
2012/01/13(金) 14:29:13.06
>>99
特定アーキテクチャの問題で共通部分に手を出すのはむずいのでふ
2012/01/13(金) 15:20:26.40
特定アーキテクチャの問題
じゃあねえよ、ど素人が
102デフォルトの名無しさん
垢版 |
2012/01/14(土) 14:19:50.12
>>101
んではRX以外に問題を起こしているアーキテクチャを挙げてくれ
2012/01/14(土) 17:37:33.78
他のアーキテクチャはmdいじくって、回避してるよ
どっちを修正すればいいかって話になるけど
function.cの該当部分書いたのがイマイチだって感じかな?
2012/01/14(土) 17:46:01.66
archによってはわざとmakeでコケるような細工してあることが注意したほうがいいよ
2012/01/14(土) 18:23:50.79
make の段階でこけるならまだ良心的だなw
10696
垢版 |
2012/01/22(日) 23:41:41.30
遅くなりましてすみませんが
ご回答いただいた方ありがとうございました
2012/01/27(金) 16:04:12.55
これからは礼の言葉はいらん
2012/02/28(火) 18:10:21.39
対レジスタに関して演算結果で変化がないときは最適化してくれるけど
対メモリに対しては最適化されない時があるんだね、gcc
2012/02/28(火) 18:41:02.39
頑張っても同じって場合なんじゃない?
2012/02/28(火) 18:46:57.74
レジスタ使い回しが出来る奴はあんまり影響がないけど
メモリに依存したような奴は無駄なコードを吐いちゃうってことがある?ってことです
2012/02/28(火) 19:14:32.98
最適化レベル6にしてるか?
2012/02/28(火) 19:28:33.24
aliasある疑いがある時はちゃんとメモリアクセスしないと仕方ねえしな。
2012/02/28(火) 20:01:52.41
最適化レベル6ってどこのコンパイラのこと?
114デフォルトの名無しさん
垢版 |
2012/02/28(火) 20:25:22.47
THINK Cだろ
2012/02/28(火) 22:09:56.74
Linux 0.99とかその辺の話じゃないの?
2012/02/28(火) 22:19:55.95
ワシの最適化は108まであるぞ
2012/02/28(火) 22:53:59.19
内部的には3まででしょ、gcc
-Oのあとの数字はなんでもうけつけるってだけで

最適化レベルっていっても細かなオプションが適時追加されるだけという
2012/02/29(水) 09:17:44.33
やたらでかい数字に意味があったのってEGCS時代ぐらいじゃね?
119デフォルトの名無しさん
垢版 |
2012/02/29(水) 17:21:18.80
ぐらいだね
2012/03/03(土) 12:56:03.52
4.7.0
2012/03/08(木) 01:15:56.76
gcc4.7を使ってみたくて自前ビルドで詰まったんだけど,質問はここでいいのだろうか.
場所が悪ければ誘導願いたい

Ubuntu 11.10で,gcc-4.7.0-RC-20120302をビルドしようとしてる.

標準エラーの最後の方がこんなのだったんでリンクができてなくて止まってるのはわかるんだけど
glibcやらbinutilsあたり,aptにあるそれらしいやつは違うようだった
入れるべきパッケージなりが足りてない?
それともlocateで出てくる奴にシンボリックリンクでも貼ればいいものだろうか

↓エラーログ
/usr/local/bin/ld: cannot find crti.o: No such file or directory
/usr/local/bin/ld: cannot find -lc
/usr/local/bin/ld: cannot find crtn.o: No such file or directory
collect2: error: ld returned 1 exit status


解決法探すコツみたいなものも教えていただけるとありがたい
ログが膨大で何に重点をおくべきかわからなくなってる
2012/03/08(木) 01:31:56.68
glibcのdevelみたいなのが入ってないような感じ、debian系はよー知らんけど
今のgccはビルドするときに必要なパッケージが増えてるから、ご注意を

ttp://packages.ubuntu.com/oneiric/gcc
2012/03/08(木) 07:45:36.03
>>121
Ubuntuにもmultiarch問題があるのか。
2012/03/08(木) 08:35:59.30
自分で答え書いてるやん
2012/03/08(木) 10:05:25.71
リナックスは問題だらけで使い物にならんよ。
リナックスがパッケージシステムが出来て糞になってる間に
windowsは安定してみんな使うようになった。
2012/03/08(木) 10:54:37.12
>>125 のようなバカが使ってるよな
2012/03/08(木) 10:59:19.59
メーカーがドライバーを作らないからな。
偽者のドライバーでは機能制限が多すぎて
最高のパフォーマンスを出すことは到底不可能だからな。
2012/03/08(木) 11:05:01.38
釣りにしてはネタが腐ってるような?
2012/03/08(木) 11:23:08.62
寿司じゃないんだから・・・・
それを言うならエサでしょう。あいにっく
釣りっぽい発言には見えないが・・・
130121
垢版 |
2012/03/08(木) 14:24:03.17
パッケージのgcc4.6は入ってるから,glibc系の依存してるパッケージは入ってるはず.

/usr/libとかに勝手に作っちゃうと先々何か入れるときに衝突しそうで避けてたんだけど
/usr/libにあるはずのものが/usr/lib/i386-linux-gnuに入っちゃってるって記事を見て
シンボリックリンク貼って走らせておいたら通ってたよ
現在make check中.

ものすごく無理やりな感があって正しいのか不安だけど,とりあえず回答に感謝
2012/03/09(金) 01:27:12.80
multiarch問題は--libdir=/usr/lib/i386-linux-gnuで解決するんじゃないのか?
2012/03/09(金) 01:46:40.72
あ,まさにそれっぽい
これか.
--libdir=dirname
Specify the installation directory for object code libraries and internal data files of GCC. The default is exec-prefix/lib.

勝手に作ったシンボリックリンク外してやってみる
2012/03/09(金) 22:22:39.29
うまくいかないな
configureに--libdir=/usr/lib/i386-linux-gnuやら
--libexecdir=/usr/lib/i386-linux-gnuやらつけて
何回か試してみたけど見に行ってくれてないみたい

ldが探す場所ってld.so.confが読んでる奴じゃなかったっけ.
こっちに/usr/lib/i386-linux-gnuも入ってるのだけど,
ldconfig -pに出てこないから探しに行ってないんだよな
ここが解決すればよさそうな気もするのだけど.
このあたりの話題はスレ違いだろうか
2012/03/09(金) 22:25:33.52
64bitなgcc作りたいの?
なら、32bitな環境入れとかないとコケるような
2012/03/09(金) 22:34:00.66
いや,そも全部32bit環境…のはず.
i386,i686はアーキテクチャの差であってbit数は関係ないよね?
2012/03/09(金) 22:37:31.73
どこでコケてるのか、文章だけじゃ、わからないよ
rpmなら、specファイル見たらって言えるんだけど
2012/03/09(金) 22:56:36.35
あ,出てるエラーは>>121です
ldが/usr/lib/i386-linux-gnu/を見ずに/usr/libまでしか見てないらしくて
crti.oとかが無いと言われる
/usr/libから手動でシンボリックリンクを貼ってみたら一回通ったけど,
そうじゃなくてオプションでそちらを見る方法があるなら知りたい

直前のコマンドは引数多すぎて何をしてるのかよくわからないけど
(ビルドしてるディレクトリ)/gcc/xgcc
のようです
2012/03/09(金) 23:57:50.14
なんかまだ具体性欠いてるきがするので追記.
gcc4.7.0RCのmake中,>>121のエラー
そのあとの出力は以下,直前のコマンドは貼れないくらい長いものでxgccを起動してるらしい
make[3]: *** [libgcc_s.so] エラー 1
make[3]: *** 未完了のジョブを待っています....
make[3]: ディレクトリ `($HOME)/build/gcc-4.7.0-RC-20120302/build/i686-pc-linux-gnu/libgcc' から出ます
make[2]: *** [all-stage1-target-libgcc] エラー 2
make[1]: *** [stage1-bubble] エラー 2
make: *** [all] エラー 2
make[2]: ディレクトリ `($HOME)/build/gcc-4.7.0-RC-20120302/build' から出ます
make[1]: ディレクトリ `($HOME)/build/gcc-4.7.0-RC-20120302/build' から出ます
---ここまで---

自分で判断できることと知りたい内容は>>137の内容.
2012/03/10(土) 00:03:21.81
--disable-bootstapつけてやってみるとか、適当だけど
自分もその辺でハマった口だけど、
build.log見たりとか
コケたところを部分的に手動でやってみたりとか

gccのビルドって、自力でやるのがだんだん難しくなってる、自分的には

4.6あたりで出来るか試してみるのも、ひとつの手
2012/03/10(土) 00:48:37.07
そりゃ、野良のldをmultiarch対応せずに使っているなら見ねーよな
2012/03/10(土) 00:56:54.52
いろんなアーキテクチャに対応するために
/usr/libにあったものを/usr/lib/(アーキテクチャ名)に移動してあるものがあって
ldもmultiarchに対応したものを指定してやらないとならない,ってことか

ldはbinutilsに含まれるってことで合ってる?
binutilsも新しいもの入れたつもりだけど,古いの呼んじゃってるかもしれないから
そのあたり調べてみる
2012/03/10(土) 00:58:53.88
本当にバカだな
意味が分からないなら、ubuntuのbinutilsつかってみろ
それで解決
2012/03/10(土) 01:03:33.54
Debianのgcc-4.7をリビルドして使おうとしないところが、頑なな奴だな。
2012/03/10(土) 01:26:26.28
>>142
Ubuntu,もしかしたらDebianからかもしれんけど
ディストリビューション特有の問題でそれに対応したのがちゃんと用意されてるから
素直にそれを使え,でいいんだろうか
とりあえず自分で入れたbinutils削除してld -vでfor Ubuntuの文字を確認してから
もう一度make中

>>143
Linux使い始めてそう経ってないから,常識をわかってないところは多々あると思うんで
そういうところこそ聞きたかった
4.7使いたいだけならgnuの素のソースだけじゃなくて,
Debianから試験的パッケージ出てたんだね
だめならこっち試してみる
2012/03/11(日) 00:02:07.11
--- a/src/gcc/config/i386/t-linux
+++ b/src/gcc/config/i386/t-linux
@@ -3,3 +3,5 @@
# t-slibgcc-elf-ver and t-linux
SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver \
$(srcdir)/config/i386/libgcc-glibc.ver
+
+MULTIARCH_DIRNAME = i386-linux-gnu
2012/03/22(木) 23:22:47.12
GCC 4.7.0 released [2012-03-22]
2012/03/25(日) 01:22:03.60
__transaction_atomic の使い方がわからん
中に出てくる変数全部アトムボーイになるの?
148デフォルトの名無しさん
垢版 |
2012/03/25(日) 01:32:10.51
超高速にシンタックスチェックだけしてくれるモードとか無い?
2012/03/25(日) 01:40:49.49
lint 使えよ。
2012/03/25(日) 11:27:59.90
>>148 -fsyntax-only
2012/03/25(日) 21:53:44.63
何の処理もせず、時間稼ぎをしたいとき、どのような方法がありますか?
例えば、キー入力を受け付けてから、5秒あけて、入力された内容を表示するという場合です
2012/03/25(日) 21:54:50.20
sleep(5);
2012/03/25(日) 22:58:58.43
>>147
gcc/testsuite/c-c++-common/tm/trxn-expr-2.c
2012/03/25(日) 23:48:00.43
>>153
__transaction_atomic (a+b+c);
これがどう働くのかを聞いてるんだよ・・・
2012/03/26(月) 00:25:25.52
>>154
噛み付かれても、俺もわからんのだけど
gcc gcc/testsuite/c-c++-common/tm/trxn-expr-2.c -S -fgnu-tm -O2
でもやって、自力で答え見つけたら
なんとなく、ポインターアクセス経由でやってるだけな感じだけど
(思ってる答えとは違うかもね)
2012/03/26(月) 17:18:46.67
gcc (GCC) 4.8.0 20120316 (experimental)
157デフォルトの名無しさん
垢版 |
2012/03/27(火) 15:41:50.42
macportで入れたgcc46で
gcc-mp-4.6 -march=corei7 -E -v - </dev/null 2>&1 | grep cc1
としても、>.75のようではなく
-fPIC -mmacosx-version-min=10.6.8 -march=corei7 -m64
としかででないのですけど、march=corei7の効果はないということでしょうか?
corei7をcorei7-avxやcore2にしてもどうようです。nativeにしたときだけ>>75のようにでてきます。

2012/03/27(火) 18:00:44.76
だって明示的にCPU指定したら命令セットは自明だろ
キャッシュサイズは個々に違うから指定されないわけで
2012/03/27(火) 19:31:02.63
そうか。d
ということは、corei7でmarch=nativeやmarch=corei7を使うと、
mfpmath=sseを使う意味はないという理解で大丈夫ですか?
2012/03/28(水) 13:32:02.99
>>159
定義済みマクロがあるやつは
cpp -march=core2 -dM < /dev/null | grep SSE
とかで分かるな

2012/03/28(水) 18:27:01.41
混乱中
manを読むと、-mavxは MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,SSE4.2 and AVXをサポートしているから
配布目的でなければ、-mmmxや-msseなどは付ける必要ないんだろうか?

>>75を見ると、-march=nativeをしたときには-mavxが自動的につくけど、
march=corei7-avxでは-mavxは自分で付けなければいけないということなのか?

うむむむ


2012/03/28(水) 22:26:55.80
>>161
avxが有効だと__AVX__が1に定義されるから>>160でそれを調べたら分かるのでは
2012/03/28(水) 22:33:05.99
>>161
-marchや-mtuneは-msseや-mavxみたいなオプションのセットという認識だけどな
nativeの場合はプロセッサのフラグを呼んで有効になっている機能を使おうとするから
msseみたいな物が個別につくのでは
例えばKVMとかで仮想CPUの場合に、物理CPUにある機能が一部無効になってると個別のオプションが変わったりする
2012/03/28(水) 23:01:18.78
ぶっちゃけアセンブリ出力を見たらどうか
2012/03/28(水) 23:51:52.73
{"corei7-avx", PROCESSOR_COREI7_64, CPU_COREI7,
PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
| PTA_SSSE3 | PTA_SSE4_1 | PTA_SSE4_2 | PTA_AVX
| PTA_CX16 | PTA_POPCNT | PTA_AES | PTA_PCLMUL},

if (processor_alias_table[i].flags & PTA_AVX
&& !(ix86_isa_flags_explicit & OPTION_MASK_ISA_AVX))
ix86_isa_flags |= OPTION_MASK_ISA_AVX;
2012/03/29(木) 12:06:21.03
SSEにしろAVXにしろ、OSが明示的に許可してないと使えないんだから
勝手に生成されたらまずいんでね
2012/03/29(木) 12:20:20.92
自分で指定しておいて勝手にとは如何に
2012/04/09(月) 10:04:51.69
gcc -Q --help=target -march=corei7-avx
でわかるね
2012/04/09(月) 15:45:06.79
現在時刻を端末上で、

○時○分○秒

と表示させるにはどのような関数があるでしょうか?
環境はlinuxです。
2012/04/09(月) 16:25:22.33
info gcc

そんな機能あるのか?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況