1 名前:デフォルトの名無しさん [2009/06/27(土) 08:34:50 ] 史上最強かもしれないツール、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について part8 pc12.2ch.net/test/read.cgi/tech/1192201659/l50
52 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 13:54:30 ] さんくす lengthの定義のところにtypenameを入れたら通りました。 C++って元からそんな仕様だったっけ? まあ通ったからいいや。
53 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 23:20:26 ] そういう仕様です。
54 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 23:36:16 ] 環境→OS:Fedora11 gccのバージョン:gcc 4.4.0 GEANT4というシュミレーションコードのコンパイルがうまくいかず、困っています。 3ヶ所ほどコンパイル中にエラーが出ていて、2つは潰したのですが… 最後に残った Compiling G4ScoreLogColorMap.cc ... src/G4ScoreLogColorMap.cc: In member function 'virtual void G4ScoreLogColorMap::DrawColorChartText(G4int)': src/G4ScoreLogColorMap.cc:157: error: 'sprintf' is not a member of 'std' gmake[2]: *** [/home/xxxxxxxxxxxxx/geant4/tmp/Linux-g++/G4detutils/G4ScoreLogColorMap.o] エラー 1 というエラーが取り除けなくて困っています。 読み込んでいるヘッダーがおかしいんだろうなぁとは思うのですが… ネットで調べて、色々読み込んでみました。 (1) ttp://www.drk7.jp/MT/archives/001498.html ここを参考に…(ここはatoiが読み込めませんと出ていた。) #include <cstdlib> #include <cstring> (2) ttp://code.google.com/p/pyminuit/issues/detail?id=8 を参考にして… #include <algorithm> (3) ttp://simd.jugem.jp/?eid=73 を参考にして、また、c++がcを下位互換でサポートしている事を踏まえて #include <stdio.h> これだけ加えてみましたが、同じエラーが続いています。 どのヘッダーに含まれているのか、ご存知の方いらっしゃいましたら、ご教示いただけませんか? 宜しくお願いいたします。
55 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 23:45:05 ] <cstdio>
56 名前:54 mailto:sage [2009/07/03(金) 23:47:06 ] >>55 本当にありがとうございます!解決しました!
57 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 06:54:06 ] 標準のINCLUDE PATHは変えられないのですか? 自分のHOMEにライブラリをインストールしたのですが、コンパイル時には システムに標準で入っている古いライブラリのヘッダを観に行ってしまって 失敗するようです。 /usr/localを見ないようにはできませんか?
58 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 09:52:14 ] >>57 -I-
59 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 11:36:33 ] 普通に見ない
60 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 15:01:16 ] -isystem
61 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 03:22:21 ] gccのオプションで -mtune と -march の違いって何ですか?
62 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 03:27:36 ] man gcc
63 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 03:40:41 ] ありがとう ググって解決しました
64 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 20:30:20 ] 4.4.1
65 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 18:25:36 ] www.jp.kernel.org/pub/GNU/gnu/gcc/gcc-4.4.1/
66 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 17:02:45 ] gcc 4.4を使うとGPL強制されるので使っちゃダメです
67 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 17:21:13 ] 夏だなぁ
68 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 19:39:47 ] gccがパブリックドメインになるのは50年後です
69 名前:68 mailto:sage [2009/08/01(土) 19:52:06 ] 間違えた、著者の死後50年だよね。
70 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 20:02:18 ] 著作権についてロクに知らない馬鹿だな。 保護期間が50年なのは財産権であって、人格権は含まれない。 パブリックドメインは人格権に相当するものも含めパブリックと解される。
71 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 20:26:15 ] 人格権は日本では相続不可。保護期間は死後0年まで。
72 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 20:38:51 ] 116条
73 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 20:44:15 ] 影響しないはずの e_X のコメントの有無で結果が変わ る。誰か報告してくれ。 #include <stdio.h> // gcc version 4.2.1 20070719 [FreeBSD] // gcc version 4.1.2 20071124 (Red Hat 4.1.2-42) typedef enum { // e_X = -1, e_a, } enum_t; void foo(enum_t e) { printf("e %s\n", e < 0 ? "< 0" : ">= 0"); } int main() { enum_t e = -1; foo(e); return 0; }
74 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 20:56:33 ] > Each enumerated type shall be compatible with char, a signed integer type, or an > unsigned integer type. The choice of type is implementation-defined,108) but shall be > capable of representing the values of all the members of the enumeration. 意訳) enum の型は処理系定義だよ、ただしメンバの値はすべて表現できなければならない なので、メンバに負の値がなければ、処理系によっては unsigned を選ぶかもしれない unsigned になった場合は e = -1 は e = (unsigned) -1 のことだから、 なんというか、まぁ、仕方ないんじゃないか
75 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 20:57:19 ] e_Xがないとeが負とならないと判断して printf("e %s\n", e < 0 ? "< 0" : ">= 0"); が printf("e %s\n", ">= 0"); に最適化されてるみたい。
76 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 21:14:59 ] >>74 マジか…int とコンパチだと思ってたよ。
77 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 21:16:17 ] いやでも同一の implementation で揺れるのはどうなの?(w
78 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 21:26:09 ] コードとかの問題じゃないけど、わかる人いたら回答おね。 GCC4.4を--prefix=/opt --program-suffix=-4.4のOPTで自己ビルドインスコ。 これでいくとlibstdc++.so.6とlibgcc_s.so.1が/opt/lib64ディレクトリにできるんだけど、 問題はコンパイルしたアプリがこれらを参照しないでUbnuntu9.04のGCC4.3とセット物の/usr/lib配下の 物を参照してる。アプリをコンパイル時にLD_RUN_RATHに/opt/lib64をつけても変わらない。 ちなみに/opt/lib64/libstdc++.so.6は/opt/lib64/libstdc++.so.6.0.12へ、/usr/lib/libstdc++.so.6は /usr/lib/libstdc++.so.6.10へのリンクだからバージョン違ってる・・ /etc/ld.so.confに/opt/lib64を追記すると両方共それを参照するけど、そうなるとシステム全部のアプリが (Ubuntuのgcc4.3でコンパイルされてる)全部gcc4.4のを読んでしまう(lddコマンドの結果)。 そうなるとよくないですよね。なのでやめました。 実行アプリ毎にLD_LIBRARY_PATHをつける管理が面倒なのでGCC4.4でコンパイルしたアプリも現状の GCC4.3のlibstdc++とlibgcc_sを読ませておく状態で使用して何か後々問題出る可能性ありますか?
79 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 21:26:54 ] >>73 アセンブリコード出力して比較してみろよ
80 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 21:34:59 ] >>78 リンク時に -Wl,-rpath,/opt/lib64 とかいう話かね?
81 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 21:38:09 ] >>78 LD_RUN_RATH→LD_RUN_PATH
82 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 21:46:19 ] >>77 揺れていいみたいだね。 99)An implementation may delay the choice of which integer type until all enumeration constants have been seen.
83 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 21:47:42 ] >>80 お、や。もしかしてそれをコンパイル時にコンパイラフラグで渡せばいいのでしょうか。 やってみます^^ >>81 すまそ、タイプミスです。
84 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 00:21:35 ] >>78 > /etc/ld.so.confに/opt/lib64を追記すると両方共それを参照するけど、そうなるとシステム全部のアプリが > (Ubuntuのgcc4.3でコンパイルされてる)全部gcc4.4のを読んでしまう(lddコマンドの結果)。 それほんと?埋め込まれたバージョン番号が違うから、そのへん良きに計らってくれると思ったんだけど。
85 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 01:11:13 ] >>78 そういうもんだ。Ubuntuのg++-4.2も4.3のlibstdc++使ってるし、PPAにある g++-4.4を入れるとlibstdc++も4.4にアップグレードされる。
86 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 16:46:34 ] まーlibstdc++のマイナーバージョン違いは気にしなくていいんじゃね?
87 名前:デフォルトの名無しさん [2009/08/27(木) 18:58:19 ] -fopenmpだっけ? あれをつけるのとつけないとで違いってでる?
88 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 23:14:48 ] pragma omp云々 してないソースだと無意味。
89 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 22:11:25 ] gcc4.4ってGPL3だから Windows以外で採用不可能なんだね
90 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 00:12:27 ] は?
91 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 01:22:03 ] ひ?
92 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 02:02:51 ] ふぅ…
93 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 05:53:28 ] =3
94 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 10:08:46 ] うほっ
95 名前:デフォルトの名無しさん [2009/09/10(木) 22:31:17 ] gcc 4.4.3 releaseの情報をギボンヌ
96 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 09:45:57 ] gcc-4.4でコンパイルしたオブジェクトとgcc-4.2でコンパイルしたオブジェクトを リンクするって出来るものなの?
97 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 09:59:01 ] できる
98 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 11:50:22 ] libstdc++の微妙な違いにはまったりして。 まあMajorが同じなら大丈夫か。
99 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 13:38:45 ] >>97 ありがとうございます。やってみたら出来ました。
100 名前:デフォルトの名無しさん [2009/09/12(土) 08:47:46 ] 別のプラットフォームのプログラムを開発することはできますか?
101 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 09:14:46 ] GCC クロスコンパイル でぐぐれ
102 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 20:19:01 ] 使ってるレンタル鯖が C/C++ で書いた CGI を使えるって書いてあるんだけど、 シェルは解放してないからクロスコンパイル環境を作って対応したことはある。 (鯖は無料だからその程度の手間は仕方ないんだが。) 最近の GCC ならそんなに難しいことではない。 でも、ライブラリ類はコンパイル済みのをどこかからもってきた方がいいぞ。
103 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 23:55:37 ] g++ には VC のプリコンパイル済ヘッダみたいな機能はないんですかいの? boost 使ったソースをコンパイルしようとしたら遅すぎてやっとれんです。
104 名前:デフォルトの名無しさん mailto:sage [2009/09/13(日) 00:24:16 ] gccにもpchぐらいあるわい
105 名前:デフォルトの名無しさん mailto:sage [2009/09/13(日) 00:25:09 ] あ、ごめん、boostは知らんです… ccacheで我慢するくらいしか思いつきません
106 名前:103 mailto:sage [2009/09/13(日) 00:38:06 ] おお、あるのね。どもっす。 とりあえずあとはぐぐってみます。
107 名前:デフォルトの名無しさん [2009/09/26(土) 23:08:03 ] すみません質問なのですが,最近vc++からgccに乗り換えたのですが vc++にある wmain( int argc, wchar_t *argv[ ]) みたいに引数をwchar_tにすることはできるでしょうか?
108 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 23:13:13 ] エントリポイントwmainは非標準なので、gccにはない main関数内でargvをワイド文字列の配列に変換してwmainに渡すという手が有る
109 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 23:15:14 ] ありがとうございます,それでやってみます.
110 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 18:52:06 ] 質問です。 コンパイルオプションとして-Werrorをつけたいのですが、 実装上どうしても、取り除くことができない警告があります。 この警告だけはWerrorの対象からはずすということができますでしょうか? もしできるならその方法を教えてください。
111 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 19:29:47 ] gccのソースをいじる
112 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 20:24:23 ] >>110 外したい警告がどういう警告なのか書けよ。
113 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 22:47:25 ] -Whogeで有功になる警告なら-Wno-hogeで無効に出来るだろうし、 gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html なんてのもある
114 名前:110 mailto:sage [2009/10/01(木) 23:00:07 ] >>111-113 返答ありがとうございます。 Werrorの非対象にしたいのは-Wをつけた際に出力される、longjmp関連の警告です。 -Wは複数の機能を持つオプションなので、-W自体を無効化はできない状況です。
115 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 23:21:56 ] gcc.gnu.org/onlinedocs/gcc/Warning-Options.html にある通り、-Wは-Wextraの別名で、含まれる警告オプションのうち longjmpが関連しそうなのは-Wclobberedと-Wuninitializedだから、 -Wno-clobbered -Wno-uninitializedをつけてみたらどうか
116 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 23:23:49 ] -Wno-error=uninitializedとかでも良いかもな
117 名前:110 mailto:sage [2009/10/01(木) 23:34:35 ] >>115-116 ありがとうございます! 今は試せる環境がないので明日挑戦してみます。
118 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 00:59:23 ] -fltoが入る前に-combine試してみたけど、 4.4だと引数が多すぎって言われてコンパイル出来ない事があるな 4.5になると引数の最大値が大きくなったりするんだろうか… というかしてくれないと困る。 -combine -fwhole-program -ftoでビルドしたいんじゃー
119 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 05:13:28 ] 4.4.2
120 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 09:29:17 ] >>118 > 4.4だと引数が多すぎって言われてコンパイル出来ない事があるな これってどういうメッセージ?
121 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 11:16:12 ] あーもうconstructors_destructor_fn_imps.hpで一晩潰しちゃったよ><あほか
122 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 22:28:44 ] >>120 cc1: error: too many filenames given. Type cc1 --help for usage
123 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 04:15:11 ] binutils 2.20
124 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 17:31:01 ] HelloWorldを、gcc・g++を使用してWinXP・Ubuntuでコンパイルしてみた。 ---------------------------- #include <stdio.h> int main(int argc, char** argv) { printf("HelloWorld!"); return (0); } ----------------------------- WinXPは正常に実行できたけど、Ubuntuのgccがうまくいかない。 /tmp/ccaeafnN.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0' collect2: ld はステータス 1 で終了しました バージョンは4.3.3。 上記のようにリンクでエラーがでる。 コンパイラはもともと入ってたやつだから、導入に失敗したわけではなさそうだけど。 オプションも出力先以外は指定してないし。 原因が分かるエスパーな方はいませんか?
125 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 17:40:09 ] #include <stdio.h> を #include <cstdio> に printf を std::printf に替えてみたらどうなる?
126 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 17:46:22 ] >>124 g++標準のライブラリがリンクされてないように見える。 g++ hello.cc ではなく gcc hello.cc でコンパイルしてない?
127 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 18:06:18 ] この手の「普通にやったらエラーが出るはずが無い」のに gccを使っていてリンクエラーが出る場合、大抵は>>126 だよな。 普通にg++とするか、あるいは-lstdc++とかでもなんとかなるもんだけど 意外にそこでひっかかる人も多いよね。 まあ>>124 の原因は知らないけど。
128 名前:124 mailto:sage [2009/10/18(日) 18:44:08 ] 拡張子を.cにしたらいけました。 ありがとう。 それにしてもアホすぎる……。 TDM/Mingwだと「gcc hello.cpp」は通るけど「g++ hello.cpp」がリンクエラー。 \(^o^)/
129 名前:デフォルトの名無しさん [2009/10/18(日) 19:27:04 ] -lstdc++ か?
130 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 19:32:55 ] gccの#defineマクロの記述で 通常の関数のreturnに相当する記述ってどうやって書けばいいのでしょうか?
131 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 19:34:07 ] それがわからないようならマクロなぞ使うな。あぶなっかしすぎる。
132 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 19:44:13 ] >>131 まさか知らないのですか? バカなんですか?
133 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 19:56:48 ] gccの話題じゃないな
134 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 20:16:45 ] >130 cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/gccextend.html ここでも読んだらいいよ もっとも僕は、-pedantic-errorsを付けてコンパイルしているから無縁だけど
135 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 02:34:19 ] >>128 要するに、GCCでは拡張子で動作が変わるってことか。
136 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 06:36:28 ] C Compilerでなくて Compiler Collectionだからね。 拡張子を識別して使う言語を選択する。
137 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 08:03:15 ] 拡張子で言語は選んでくれるのにライブラリは選んでくれないという気 の利かなさ。
138 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 08:12:59 ] extern "C" { とかあるしね。言語と実行環境を分けているんだと思う。
139 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 22:46:09 ] だってオブジェクトはどちらも.oで、そこからリンクする時に 必要に成るライブラリがどちらかなんて ld には分からない。 増改築を繰り返した田舎の温泉旅館みたいなc++は捨てて、 ISO C(c99)でええやん。
140 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 22:49:08 ] c99のほうが田舎の温泉旅館みたいなんだが……
141 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 18:22:28 ] C99って使ってる現場あるのか。
142 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 21:12:36 ] 全機能ばりばり使ってます、という所は少ないと思うが、 //コメントとか、変数定義の混在とかは割と使ってるんじゃないか?
143 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 21:37:37 ] 変数は最初に必要になった箇所で宣言するようにしたらかなり見易い。 変数はなるべく使い棄てにしたほうがコンパイラもフロー解析しやすいらしいし。
144 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 22:44:44 ] 数値計算のパッケージ書いてるから、 <fenv.h>がないとどうしようもない。
145 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 01:03:11 ] 使い捨てと言うか、スコープを狭くすると、フロー解析もやり易いし レジスタ割り付けも楽。最適化もやりやすく成る。
146 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 11:44:01 ] 俺の周りではC99という言葉すら通じん…
147 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 11:54:24 ] >>144 Fortran使えよ
148 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 00:51:59 ] レジスタは一括宣言のほうが楽なんじゃね? だってベースポインタ一緒なんだぜ?
149 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 02:41:36 ] Javaじゃねーんだから汎用レジスタに乗せて使い捨てることもあるだろ
150 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 02:50:57 ] いかにメモリアクセスを少なくするかが鍵みたいだよ。
151 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 03:03:23 ] >>149 そういう最適化はどこで宣言しようと同じだろ
152 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 08:52:09 ] >>148 >>149 40年くらい前の最適化の話みたいですね。