史上最強かもしれなかったツール、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/
探検
GCCについて part10
■ このスレッドは過去ログ倉庫に格納されています
2011/09/03(土) 14:13:04.14
285デフォルトの名無しさん
2013/03/25(月) 13:01:18.08 壊れるようなコードを書いているやつが悪い
286デフォルトの名無しさん
2013/03/25(月) 13:26:59.99 >>284
このスレでこの程度のジャーゴンもわからないとか。
このスレでこの程度のジャーゴンもわからないとか。
287デフォルトの名無しさん
2013/03/25(月) 13:55:39.89 >>286
単語の問題ではなく文法の問題では?
単語の問題ではなく文法の問題では?
288デフォルトの名無しさん
2013/03/25(月) 14:46:33.36 brokenな日本語でも日本語の話者ならば補って理解できる。
289デフォルトの名無しさん
2013/03/25(月) 21:04:51.78 実行される可能性がある未定義動作のコードが一行でも混じっていれば
そのプログラムは起動直後からソースコードを一切無視してどういうふるまいをしても構わない。
過度の最適化ではない。
そのプログラムは起動直後からソースコードを一切無視してどういうふるまいをしても構わない。
過度の最適化ではない。
290デフォルトの名無しさん
2013/03/25(月) 22:16:03.70291デフォルトの名無しさん
2013/03/25(月) 23:31:42.31 罵倒遊びも飽きた
292デフォルトの名無しさん
2013/03/28(木) 12:01:59.57 4.8、動かない以前にビルド通らんのが出てきたぞ
バージョン上がる度に型チェック厳しくなる一方だぜ
バージョン上がる度に型チェック厳しくなる一方だぜ
293デフォルトの名無しさん
2013/04/02(火) 05:44:55.99 http://gcc.gnu.org/projects/cxx0x.html
Rvalue references for *this : GCC 4.8.1
Rvalue references for *this : GCC 4.8.1
294デフォルトの名無しさん
2013/04/06(土) 15:49:25.58 fast-mathオプションをつけるとisnanが機能しなくなるのだけど、何かいい手はない?
295デフォルトの名無しさん
2013/04/06(土) 16:06:06.33 そのファイルだけfast-mathを外してコンパイルする。
と、どうなるか試してほしい。
と、どうなるか試してほしい。
296デフォルトの名無しさん
2013/04/06(土) 16:45:32.27 fast-mathつけなければ大丈夫。
fast-mathをつけると、isnan以外にも、a != aで判定する方法もダメ。
何かいい方法ないかな
fast-mathをつけると、isnan以外にも、a != aで判定する方法もダメ。
何かいい方法ないかな
297デフォルトの名無しさん
2013/04/06(土) 16:57:51.17 -ffast-math をばらして必要なオプションだけを指定してみたら?
-ffast-math
Sets -fno-math-errno, -funsafe-math-optimizations,
-fno-trapping-math, -ffinite-math-only, -fno-rounding-math, -fno-signaling-nans and fcx-limited-range.
-ffast-math
Sets -fno-math-errno, -funsafe-math-optimizations,
-fno-trapping-math, -ffinite-math-only, -fno-rounding-math, -fno-signaling-nans and fcx-limited-range.
298デフォルトの名無しさん
2013/04/06(土) 22:18:43.85 -ffast-math -fno-finite-math-only の併用でok
299デフォルトの名無しさん
2013/04/08(月) 21:00:04.38 4.8ビルドしようとするとgccでintl-printと__printf__が不明と怒られる
仕方ないのでconfig.hに#include <libintl.h>を書き足すと>>255と同じ事
言われて怒られる、しかしgmp等はインスト済み
これってx64のライブラリ以外にx86のライブラリも必要って事なのかな?
仕方ないのでconfig.hに#include <libintl.h>を書き足すと>>255と同じ事
言われて怒られる、しかしgmp等はインスト済み
これってx64のライブラリ以外にx86のライブラリも必要って事なのかな?
300デフォルトの名無しさん
2013/04/08(月) 22:29:24.61301デフォルトの名無しさん
2013/04/08(月) 23:18:38.75 レスありがとう!
んでも
64ビットのWindowsおよびgccだけSJLJ例外の32ビットベースのmultilibの
バージョンについては#エラーがサポートされています。
って怒られた。。。ウチの環境はWin7x64、gccはTDM64です
configureはこれ
LIBS="-lintl -liconv " ../gcc-4.8-20130404/configure --prefix=/usr/gcc \
--build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 \
--with-tune=generic --enable-threads=posix --disable-multilib --enable-static \
--enable-languages=c,c++,objc,obj-c++ --enable-libgomp --disable-sjlj-exceptions \
--with-dwarf2 --enable-version-specific-runtime-libs --disable-win32-registry \
--disable-werror --disable-nls --enable-lto --with-system-zlib \
--enable-libstdcxx-debug --enable-cxx-flags='-fno-function-sections -fno-data-sections' \
--enable-fully-dynamic-string --disable-libstdcxx-pch --disable-bootstrap \
--with-mpc-lib=/usr/tool/lib --with-mpc-include=/usr/tool/include \
--with-mpfr-include=/usr/tool/include --with-mpfr-lib=/usr/tool/lib \
--with-gmp-include=/usr/tool/include --with-gmp-lib=/usr/tool/lib \
--with-cloog-include=/usr/tool/include --with-cloog-lib=/usr/tool/lib \
--with-isl-include=/usr/tool/include --with-isl-lib=/usr/tool/lib
--disable-multilibを消しても、やっぱりx64云々で蹴られますた
ってかconfigureのログ見てると、intl=ok, iconv=okって言ってるのになんで
intlの関数が不明って言われるのかなあ。
んでも
64ビットのWindowsおよびgccだけSJLJ例外の32ビットベースのmultilibの
バージョンについては#エラーがサポートされています。
って怒られた。。。ウチの環境はWin7x64、gccはTDM64です
configureはこれ
LIBS="-lintl -liconv " ../gcc-4.8-20130404/configure --prefix=/usr/gcc \
--build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 \
--with-tune=generic --enable-threads=posix --disable-multilib --enable-static \
--enable-languages=c,c++,objc,obj-c++ --enable-libgomp --disable-sjlj-exceptions \
--with-dwarf2 --enable-version-specific-runtime-libs --disable-win32-registry \
--disable-werror --disable-nls --enable-lto --with-system-zlib \
--enable-libstdcxx-debug --enable-cxx-flags='-fno-function-sections -fno-data-sections' \
--enable-fully-dynamic-string --disable-libstdcxx-pch --disable-bootstrap \
--with-mpc-lib=/usr/tool/lib --with-mpc-include=/usr/tool/include \
--with-mpfr-include=/usr/tool/include --with-mpfr-lib=/usr/tool/lib \
--with-gmp-include=/usr/tool/include --with-gmp-lib=/usr/tool/lib \
--with-cloog-include=/usr/tool/include --with-cloog-lib=/usr/tool/lib \
--with-isl-include=/usr/tool/include --with-isl-lib=/usr/tool/lib
--disable-multilibを消しても、やっぱりx64云々で蹴られますた
ってかconfigureのログ見てると、intl=ok, iconv=okって言ってるのになんで
intlの関数が不明って言われるのかなあ。
302デフォルトの名無しさん
2013/04/08(月) 23:45:08.36 消すなら --disable-multilib ではなくて --disable-sjlj-exceptions だろjk
あと、もし binutils を一緒にビルドしようとして、
gcc のフォルダ内に binutils/{なんやらかんやら} へのリンクを張ってるなら、
両者に共通のライブラリが、バージョン違って失敗するかも
あと、もし binutils を一緒にビルドしようとして、
gcc のフォルダ内に binutils/{なんやらかんやら} へのリンクを張ってるなら、
両者に共通のライブラリが、バージョン違って失敗するかも
303デフォルトの名無しさん
2013/04/09(火) 00:07:40.47 消したけどダメ。。
ターゲット・ホスト・ビルドのx86_64-w64を消さないとどうしても
「はぁ?x64?」みたいな事言われるので消して、それでもintlで文句言われて
config.hに<linintl.h>書き加えてビルド進めるとlibgccで
Assembler messages:
Error: invalid instruction suffix for `push'
アセンブラ関連のエラーだと思うんだけど、ターゲットをx86_64-w64にすると怒
られ、libintlで怒られ…gccサイトのQ&A見ても「我々は悪くない、文句言われる
テメーが悪い」みたいな事書いてあるし。。。。
もうネルソン!
ターゲット・ホスト・ビルドのx86_64-w64を消さないとどうしても
「はぁ?x64?」みたいな事言われるので消して、それでもintlで文句言われて
config.hに<linintl.h>書き加えてビルド進めるとlibgccで
Assembler messages:
Error: invalid instruction suffix for `push'
アセンブラ関連のエラーだと思うんだけど、ターゲットをx86_64-w64にすると怒
られ、libintlで怒られ…gccサイトのQ&A見ても「我々は悪くない、文句言われる
テメーが悪い」みたいな事書いてあるし。。。。
もうネルソン!
304デフォルトの名無しさん
2013/04/09(火) 22:43:32.74 やっとでけたあああ
七誌さんそして>>300ありがとう!
一応手順
gcc用のディレクトリを作成、binutilsをビルド→インストール
gccをコンパイラのみビルドしてinstall-gcc
ここでmsys上のmingwを今作ったgccに切り替え
mingw-w64ランタイムをヘッダのみビルド→インストール
ランタイムをビルド→インストール
gccの残りをビルド→インストール
今まで通常使ってるmingwだけでビルドしようとしてたのが間違ってた?っぽい
七誌さんそして>>300ありがとう!
一応手順
gcc用のディレクトリを作成、binutilsをビルド→インストール
gccをコンパイラのみビルドしてinstall-gcc
ここでmsys上のmingwを今作ったgccに切り替え
mingw-w64ランタイムをヘッダのみビルド→インストール
ランタイムをビルド→インストール
gccの残りをビルド→インストール
今まで通常使ってるmingwだけでビルドしようとしてたのが間違ってた?っぽい
305デフォルトの名無しさん
2013/04/09(火) 22:49:25.32 なんだかよく分からなかったけど強引に潰したエラー、3件
1.↓って言われる
i386/cygming.h:358:2: error: #error For 64-bit windows and 32-bit based multilib version of gcc just SJLJ exceptions are supported.
i386/mingw32.h:101:2: error: #error DW2 unwind is not available for 64-bit.
i386/cygming.h:358:2: error: #error For 64-bit windows and 32-bit based multilib version of gcc just SJLJ exceptions are supported.
i386/mingw32.h:101:2: error: #error DW2 unwind is not available for 64-bit.
i386/cygming.h:358:2: error: #error For 64-bit windows and 32-bit based multilib version of gcc just SJLJ exceptions are supported.
i386/mingw32.h:101:2: error: #error DW2 unwind is not available for 64-bit.
コメントアウト
2.
intl_printが不明
config.hに<libintl.h>を書き足す
3.
libstdc++-v3/include/bits/basic_string.hでエラー
call googleで外人さんのパッチをクローン
+++ ./libstdc++-v3/config/os/mingw32-w64/os_defines.h
+#include <_mingw_mac.h>
+#if !defined (__MINGW64_VERSION_MAJOR) || (__MINGW64_VERSION_MAJOR < 3)
#define _GLIBCXX_HAVE_BROKEN_VSWPRINTF 1
+#endif
3は、なんだか公式のmingw32使えみたいな事言ってた気がするけど1.2が分からんち
特に2番、なんでヘッダを要求されるのか。公式になんか書いても怖い人しかいないよう
な雰囲気なので聞けない。。。
グダグダ書いたけど結局は>>302のbinutils云々がヒントになってビルド出来た、ありがとね
1.↓って言われる
i386/cygming.h:358:2: error: #error For 64-bit windows and 32-bit based multilib version of gcc just SJLJ exceptions are supported.
i386/mingw32.h:101:2: error: #error DW2 unwind is not available for 64-bit.
i386/cygming.h:358:2: error: #error For 64-bit windows and 32-bit based multilib version of gcc just SJLJ exceptions are supported.
i386/mingw32.h:101:2: error: #error DW2 unwind is not available for 64-bit.
i386/cygming.h:358:2: error: #error For 64-bit windows and 32-bit based multilib version of gcc just SJLJ exceptions are supported.
i386/mingw32.h:101:2: error: #error DW2 unwind is not available for 64-bit.
コメントアウト
2.
intl_printが不明
config.hに<libintl.h>を書き足す
3.
libstdc++-v3/include/bits/basic_string.hでエラー
call googleで外人さんのパッチをクローン
+++ ./libstdc++-v3/config/os/mingw32-w64/os_defines.h
+#include <_mingw_mac.h>
+#if !defined (__MINGW64_VERSION_MAJOR) || (__MINGW64_VERSION_MAJOR < 3)
#define _GLIBCXX_HAVE_BROKEN_VSWPRINTF 1
+#endif
3は、なんだか公式のmingw32使えみたいな事言ってた気がするけど1.2が分からんち
特に2番、なんでヘッダを要求されるのか。公式になんか書いても怖い人しかいないよう
な雰囲気なので聞けない。。。
グダグダ書いたけど結局は>>302のbinutils云々がヒントになってビルド出来た、ありがとね
306デフォルトの名無しさん
2013/04/09(火) 23:22:10.38 追記:libintlがぶっこわれてた
今までどうやってビルド通ってたんだろ・・・・・・・・・
今までどうやってビルド通ってたんだろ・・・・・・・・・
307デフォルトの名無しさん
2013/04/10(水) 12:19:18.40 馬鹿には無理
308デフォルトの名無しさん
2013/04/13(土) 12:00:07.40 ネタじゃないので聞いてください。
一番最初のgccはどのようにコンパイルされたのですか?
一番最初のgccはどのようにコンパイルされたのですか?
309デフォルトの名無しさん
2013/04/13(土) 13:04:09.04 別のコンパイラを使う。UNIXのccとか。
歴史の話じゃなくて実用的な意味でどうするかといえば、
オフィシャルでバイナリのgccが配布されているのでそれを使う。
歴史の話じゃなくて実用的な意味でどうするかといえば、
オフィシャルでバイナリのgccが配布されているのでそれを使う。
310デフォルトの名無しさん
2013/04/13(土) 13:12:18.33 最初のGCCはCで書かれていたわけでは無いらしい
311デフォルトの名無しさん
2013/04/13(土) 13:13:20.52 ネタじゃないので聞いてください。
一番最初のccはどのようにコンパイルされたのですか?
一番最初のccはどのようにコンパイルされたのですか?
312デフォルトの名無しさん
2013/04/13(土) 13:25:22.63 最初のコンパイラは機械語で書いた
313デフォルトの名無しさん
2013/04/13(土) 14:56:44.41 最初のコンパイラはA-0 Systemらしい。
314デフォルトの名無しさん
2013/04/13(土) 18:04:08.51 gccをどうやってコンパイルするかを勉強してると
そのあたりまで平然と遡らされるよな
そのあたりまで平然と遡らされるよな
315デフォルトの名無しさん
2013/04/13(土) 18:20:46.26 Z80アセンブラをN88-BASICで実装しようとしたのは良い思い出…
316デフォルトの名無しさん
2013/04/13(土) 23:18:45.40317デフォルトの名無しさん
2013/04/14(日) 00:00:12.33 >>316
どこまで遡れるか大会だろ空気嫁よ
どこまで遡れるか大会だろ空気嫁よ
318デフォルトの名無しさん
2013/04/14(日) 05:34:33.84 ネタじゃないので聞いてください。
一番最初のアセンブラはどのようにアセンブルされたのですか?
一番最初のアセンブラはどのようにアセンブルされたのですか?
319デフォルトの名無しさん
2013/04/14(日) 05:50:10.27 ネタじゃないならアセンブラスレで訊きましょう
320デフォルトの名無しさん
2013/04/14(日) 10:08:15.61 2chは優秀な技術者が議論する場所
321デフォルトの名無しさん
2013/04/14(日) 10:54:15.95 >>318
ハンドアセンブル
ハンドアセンブル
322デフォルトの名無しさん
2013/04/14(日) 11:37:22.44 multilib有効にしてGCCビルドしたら、ライブラリビルドでldちゃんが
32ライブラリに64libを合体させてしまいまする
export -m32 -L/lib32 とかにしても言う事を聞いてくれませぬ
ググっても、バカには無理みたいな風潮
TDMとか、どうやってmultilibなGCCビルドしてるんだろ?
32ライブラリに64libを合体させてしまいまする
export -m32 -L/lib32 とかにしても言う事を聞いてくれませぬ
ググっても、バカには無理みたいな風潮
TDMとか、どうやってmultilibなGCCビルドしてるんだろ?
323デフォルトの名無しさん
2013/05/08(水) 21:32:17.28 gccの2.95.3なんですが、
gccがコンパイルされたときの./configureに渡された設定など
調べる方法は無いでしょうか?
gccがコンパイルされたときの./configureに渡された設定など
調べる方法は無いでしょうか?
324デフォルトの名無しさん
2013/05/09(木) 02:22:37.84 gcc -vは?
どうでもいいことだが、なぜそんな化石を使うのか聞いてみたい
どうでもいいことだが、なぜそんな化石を使うのか聞いてみたい
325デフォルトの名無しさん
2013/05/22(水) 15:12:42.53 gccで、以下のような情報を得るためのコマンドラインオプション、あるいは
ツール・手段はありませんでしょうか?
知りたいのは、どういう過程でライブラリがリンクされているかです。
例えば、main.cでprintf()が使われている時、
(1) main.o には未解決のシンボル'printf'がある
(2) 未解決シンボル'printf'を解決するため、libc.a 内の lib_a-printf.o をリンクした
(3) さらに lib_a-printf.o には未解決のシンボル'vfprintf'がある
(4) 未解決シンボル'vfprintf'を解決するため、libc.a 内の lib_a-vfprintf.o をリンクした
(5) さらに lib_a-vfprintf.o には未解決のシンボル・・・・
:
のような情報が得たいのです。
目的は、組み込み用でコードサイズ小さくしたい場合に、想定外のライブラリがリンク
されているような場合、何が起点になっているかを調べるためです。
(例えば、標準入出力は使ってないのに標準入出力関係のライブラリがごっそりリンクさ
れてしまう場合に、sprintf()→vfprintf()→・・・と、sprintf()を使っているのが原因
であることを知りたい)
-Wl,--verbose は試してみましたが、ダメでした。
ツール・手段はありませんでしょうか?
知りたいのは、どういう過程でライブラリがリンクされているかです。
例えば、main.cでprintf()が使われている時、
(1) main.o には未解決のシンボル'printf'がある
(2) 未解決シンボル'printf'を解決するため、libc.a 内の lib_a-printf.o をリンクした
(3) さらに lib_a-printf.o には未解決のシンボル'vfprintf'がある
(4) 未解決シンボル'vfprintf'を解決するため、libc.a 内の lib_a-vfprintf.o をリンクした
(5) さらに lib_a-vfprintf.o には未解決のシンボル・・・・
:
のような情報が得たいのです。
目的は、組み込み用でコードサイズ小さくしたい場合に、想定外のライブラリがリンク
されているような場合、何が起点になっているかを調べるためです。
(例えば、標準入出力は使ってないのに標準入出力関係のライブラリがごっそりリンクさ
れてしまう場合に、sprintf()→vfprintf()→・・・と、sprintf()を使っているのが原因
であることを知りたい)
-Wl,--verbose は試してみましたが、ダメでした。
326デフォルトの名無しさん
2013/05/22(水) 15:23:31.68 man(2)
327デフォルトの名無しさん
2013/05/22(水) 15:25:10.67 lint
329325
2013/05/22(水) 19:12:38.41 >>328
レス、ありがとうございます。
スマートリンクもコードサイズ削減に効果が無くはありませんが、(newlibは結構細かく
ソースが分けてあるので)効果は小さいと思われます。
例えば、newlibの場合newlib内で使用する静的変数を(マルチスレッド対応等が容易なよ
うに)_reent構造体にまとめてありますが、これをリンクするような関数を一つでも使用
してしまうと_reent構造体に関連する関数が多数リンクされ、コードサイズが肥大します。
これは(実行時に呼ばれることは無くても)未定義シンボル解決には必要であり、
-Wl,--gc-sectionsでは防止できません。
コードサイズの肥大の起因となるライブラリ関数が(質問に記述のように)特定でき、これ
がごく少数なら、この関数を使用しないようにプログラムを書き換えてしまえ、という
わけです。
レス、ありがとうございます。
スマートリンクもコードサイズ削減に効果が無くはありませんが、(newlibは結構細かく
ソースが分けてあるので)効果は小さいと思われます。
例えば、newlibの場合newlib内で使用する静的変数を(マルチスレッド対応等が容易なよ
うに)_reent構造体にまとめてありますが、これをリンクするような関数を一つでも使用
してしまうと_reent構造体に関連する関数が多数リンクされ、コードサイズが肥大します。
これは(実行時に呼ばれることは無くても)未定義シンボル解決には必要であり、
-Wl,--gc-sectionsでは防止できません。
コードサイズの肥大の起因となるライブラリ関数が(質問に記述のように)特定でき、これ
がごく少数なら、この関数を使用しないようにプログラムを書き換えてしまえ、という
わけです。
330デフォルトの名無しさん
2013/05/22(水) 19:16:10.03 gccじゃなくてリンカの仕事
例えばAppleのldなら-why_liveとかあるから、とりあえずman ld
例えばAppleのldなら-why_liveとかあるから、とりあえずman ld
331デフォルトの名無しさん
2013/05/22(水) 19:58:13.29 使ってる*.oをnmして未定義シンボルをリストして、
シンボルがどの*.aで定義されてるかnmして調べて、
*.aをar xして*.oにしてnmして、
以下収束するまで繰り返し。
多分機械的に出来るんじゃないか?
Cの場合、使われる*.aは引数で与える必要があって、
最初から全リストが分かってるわけだし。
シンボルがどの*.aで定義されてるかnmして調べて、
*.aをar xして*.oにしてnmして、
以下収束するまで繰り返し。
多分機械的に出来るんじゃないか?
Cの場合、使われる*.aは引数で与える必要があって、
最初から全リストが分かってるわけだし。
332325
2013/05/22(水) 20:31:03.39 >>330
誤解を招く文章ですいません、ld(binutils)を含めてgccと書いていました。
-why_live(https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/ld.1.html)
はまさに欲しているものでしたが、使用しているld(GNU ld version2.15 arm-elf/cygwin
のクロス環境)には実装されていないようでした。
* ld.info(manがなかったので)
* arm-elf-ld --help
* http://sourceware.org/binutils/docs-2.15/ld/Options.html#Options
で、why/live/chain/refferenceなどのキーワードで探してみましたが、同等のものは
見つけられませんでした。
>>331
はい、その方法(それを行うツールの作成)は最後の手段として考えています・・・
誤解を招く文章ですいません、ld(binutils)を含めてgccと書いていました。
-why_live(https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/ld.1.html)
はまさに欲しているものでしたが、使用しているld(GNU ld version2.15 arm-elf/cygwin
のクロス環境)には実装されていないようでした。
* ld.info(manがなかったので)
* arm-elf-ld --help
* http://sourceware.org/binutils/docs-2.15/ld/Options.html#Options
で、why/live/chain/refferenceなどのキーワードで探してみましたが、同等のものは
見つけられませんでした。
>>331
はい、その方法(それを行うツールの作成)は最後の手段として考えています・・・
333デフォルトの名無しさん
2013/05/22(水) 21:59:40.34 ld --help
--cref 相互参照表を出力する
-Wl,--cref
--cref 相互参照表を出力する
-Wl,--cref
335デフォルトの名無しさん
2013/06/01(土) 20:00:59.98 cygwinで gcc 4.8.1 コンパイルしたけど、エラーが2つでてインスコできんわ・・orz
336デフォルトの名無しさん
2013/06/02(日) 11:49:35.35 gcc -S -g で出力されるアセンブルコード中の.locの情報を
該当するCソースに置換するフィルタはどこかで公開してませんか?
該当するCソースに置換するフィルタはどこかで公開してませんか?
337デフォルトの名無しさん
2013/06/02(日) 23:36:32.81 as --help
-a[sub-option...] turn on listings
Sub-options [default hls]:
c omit false conditionals
d omit debugging directives
g include general info
h include high-level source
l include assembly
m include macro expansions
n omit forms processing
s include symbols
=FILE list to FILE (must be last sub-option)
gcc -c -O2 hoge.c -Wa,-ahls=hoge.lst
-a[sub-option...] turn on listings
Sub-options [default hls]:
c omit false conditionals
d omit debugging directives
g include general info
h include high-level source
l include assembly
m include macro expansions
n omit forms processing
s include symbols
=FILE list to FILE (must be last sub-option)
gcc -c -O2 hoge.c -Wa,-ahls=hoge.lst
339デフォルトの名無しさん
2013/06/13(木) 05:42:57.74 gcovの使い方の質問ここでしたらスレチですか?
340デフォルトの名無しさん
2013/06/13(木) 11:06:32.53 profとかcovはいいんじゃない?
341デフォルトの名無しさん
2013/06/14(金) 00:47:14.15 ではお言葉に甘えて。
カバレッジを調べるためgcovすると自分のソース以外の
iostream.gcovとかも大量にできてしまいます。
これを指定のディレクトリ以外は生成しないようにできないものでしょうか?
今のところ-pをつけてファイルを生成し必要のないフォルダのものをrmで消してます。
カバレッジを調べるためgcovすると自分のソース以外の
iostream.gcovとかも大量にできてしまいます。
これを指定のディレクトリ以外は生成しないようにできないものでしょうか?
今のところ-pをつけてファイルを生成し必要のないフォルダのものをrmで消してます。
342デフォルトの名無しさん
2013/06/14(金) 01:08:14.99 gcov --help
-o, --object-directory DIR|FILE オブジェクトファイルを DIR 内または呼び出し用 FILE 内で検索する
-o, --object-directory DIR|FILE オブジェクトファイルを DIR 内または呼び出し用 FILE 内で検索する
343341
2013/06/15(土) 01:10:38.28 >>342
使い方が間違っているのか期待した結果になりませんでした。
srcディレクトリに.h / .ccがあるので -o src と指定しましたがiostream.gcovは生成されました。
objディレクトリに .o があるので -o obj と指定すると
obj/test.gcno:cannot open graph file
といったエラーが表示されます。そこでobjにtest.gcnoをmvすると処理は通りますが
相変わらずiostream.gcovは生成されます。
ただlcovすると.gcovは消えるので気にしなければ済む問題かもしれません。
使い方が間違っているのか期待した結果になりませんでした。
srcディレクトリに.h / .ccがあるので -o src と指定しましたがiostream.gcovは生成されました。
objディレクトリに .o があるので -o obj と指定すると
obj/test.gcno:cannot open graph file
といったエラーが表示されます。そこでobjにtest.gcnoをmvすると処理は通りますが
相変わらずiostream.gcovは生成されます。
ただlcovすると.gcovは消えるので気にしなければ済む問題かもしれません。
344デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.AN345デフォルトの名無しさん
2013/09/13(金) 23:40:52.15 プリプロセッサの話ってここで大丈夫?スレチだったら流して
gccの-EオプションでCライクな言語のプリプロセスかけてるんだけど、そのマクロの記述で
#define get_pi(data) (6'(data)<<3)って感じの記述してて、
これの ' の部分が文字データ記述の開始として扱われてdataが置き換わらないんだけど、対策ないですかね?
gccの-EオプションでCライクな言語のプリプロセスかけてるんだけど、そのマクロの記述で
#define get_pi(data) (6'(data)<<3)って感じの記述してて、
これの ' の部分が文字データ記述の開始として扱われてdataが置き換わらないんだけど、対策ないですかね?
346デフォルトの名無しさん
2013/09/14(土) 00:07:31.67 SystemVerilogかね?
#define s '
#define get_pi(data) (6 s (data)<<3)
空白が入るけど動くよ。警告も出るけど。
規格上問題ないか、どのGCCバージョンでも動くかは分からん。
#define s '
#define get_pi(data) (6 s (data)<<3)
空白が入るけど動くよ。警告も出るけど。
規格上問題ないか、どのGCCバージョンでも動くかは分からん。
347デフォルトの名無しさん
2013/09/14(土) 00:25:12.48348デフォルトの名無しさん
2013/09/14(土) 00:39:13.04349デフォルトの名無しさん
2013/09/14(土) 00:48:05.09 >>348
プリプロセッサってプロトタイプ宣言みたいに上から順に〜ってわけではないのか。一緒だと思ってました
プリプロセッサってプロトタイプ宣言みたいに上から順に〜ってわけではないのか。一緒だと思ってました
350デフォルトの名無しさん
2013/09/14(土) 04:44:31.37 gcc4.9のtrunk版、3ヶ月くらいプラグマバグでビルド出来なかったんだけどようやく修正された
351デフォルトの名無しさん
2013/09/14(土) 10:36:33.97 >>349
いやいや、上から順で正しい。再走査はマクロ展開時の話だよ。
マクロ引数dataが展開された後に、その結果に対して再走査されて
普通の地の文と同じようにsがマクロ展開される。
最初のやつがうまく動かないのは、Cプリプロセッサは文字置き換えでなくて
トークンを置きえるから。
(6'(data)<<3) は (, 6, '(data)<<3) という3つのトークンになってしまう。
いやいや、上から順で正しい。再走査はマクロ展開時の話だよ。
マクロ引数dataが展開された後に、その結果に対して再走査されて
普通の地の文と同じようにsがマクロ展開される。
最初のやつがうまく動かないのは、Cプリプロセッサは文字置き換えでなくて
トークンを置きえるから。
(6'(data)<<3) は (, 6, '(data)<<3) という3つのトークンになってしまう。
352デフォルトの名無しさん
2013/09/14(土) 13:34:26.01 プリプロセッサなんて自作しちゃいなよ
353デフォルトの名無しさん
2013/09/17(火) 16:30:56.00 正確に標準に従ったcppを作るのは案外大変だぞ?
354デフォルトの名無しさん
2013/09/24(火) 00:04:00.29355デフォルトの名無しさん
2013/11/04(月) 10:16:18.31 dev/nullを出力先に指定するとscanfなどで入力した内容が表示されなくなるという噂を聞きました
どのように指定すると良いか教えてください
どのように指定すると良いか教えてください
356デフォルトの名無しさん
2013/11/04(月) 10:35:57.62 >>355
入力した内容なら、必要に応じて"/dev/stderr"(stderr)にでも出力すればいいじゃん。
入力した内容なら、必要に応じて"/dev/stderr"(stderr)にでも出力すればいいじゃん。
357デフォルトの名無しさん
2013/11/04(月) 19:25:05.12 >>355
scanf を実行する前に標準出力を /dev/null につけかえるのでは、pipe(), pipe2() とかで?
scanf を実行する前に標準出力を /dev/null につけかえるのでは、pipe(), pipe2() とかで?
358デフォルトの名無しさん
2013/11/04(月) 19:39:51.62 >>357
意味不明
意味不明
359デフォルトの名無しさん
2013/11/04(月) 21:46:42.94 >>357
はい、そのとおりです。
はい、そのとおりです。
360デフォルトの名無しさん
2013/11/05(火) 14:08:37.22 >>357
pipe2はlinux専用関数だがな
pipe2はlinux専用関数だがな
361デフォルトの名無しさん
2013/11/05(火) 17:17:29.77 >>360
ウイーンドーズにも/dev/nullがあるんですか?
ウイーンドーズにも/dev/nullがあるんですか?
362デフォルトの名無しさん
2013/11/05(火) 17:20:56.19 Windows だと NUL だろ。
363デフォルトの名無しさん
2013/11/05(火) 21:07:31.14 察するに、パスワード入力ではechoさせたくないとかそれ系の話だろ?
普通はtermiosやSetConsoleModeでやることで、標準出力を/dev/nullに付け替えるなんて教えた奴は凄いんだか意地悪なんだか
普通はtermiosやSetConsoleModeでやることで、標準出力を/dev/nullに付け替えるなんて教えた奴は凄いんだか意地悪なんだか
364デフォルトの名無しさん
2013/11/05(火) 21:23:56.90365デフォルトの名無しさん
2013/11/10(日) 17:40:38.34 int f(int n) { while (--n) ; return n}
がgcc -O2 (4.6.3)で
int f(int ) { retunr 0; }
のようにコンパイルされました。
この最適化がヒューリスティック(パターンデータベースのようなもの)を使っているのか
知りたいのですが、どのへんを調べればいいのでしょうか?
(質問の意図は、自作の最適化器にもこの手の処理をいれたいのですが、
場当たり的に入れるしかないのか、一般的な方法があるのかを知りたいということです。)
がgcc -O2 (4.6.3)で
int f(int ) { retunr 0; }
のようにコンパイルされました。
この最適化がヒューリスティック(パターンデータベースのようなもの)を使っているのか
知りたいのですが、どのへんを調べればいいのでしょうか?
(質問の意図は、自作の最適化器にもこの手の処理をいれたいのですが、
場当たり的に入れるしかないのか、一般的な方法があるのかを知りたいということです。)
366デフォルトの名無しさん
2013/11/10(日) 18:35:36.33 ただの定数最適化に見える。
あなたのレベルを分かるようにしないと、ドラゴンブック読めとか言われちゃうよ。
あなたのレベルを分かるようにしないと、ドラゴンブック読めとか言われちゃうよ。
367デフォルトの名無しさん
2013/11/10(日) 18:37:40.20 >>366
なんか見当違いなレスだなぁ
なんか見当違いなレスだなぁ
368デフォルトの名無しさん
2013/11/10(日) 20:37:34.22 すいません。ドラゴンブックは学生時代に買って眺めたことはあります。専攻はコンピュータ科学でした。
コンパイラ関係はあまり深く学ばなかったとの、なにぶん10年以上のブランクがあるので、
どの程度の難しさの問題なのかもわからないのです。
定数最適化、なんでしょうか?
while文が終わるとすれば0しかありえないですが、while文の停止性まで最適化器が判断できるのか疑問だったのです。
追伸:
int f(int n) { while (n=n-2) {} return n; } main() { f(-2); }
とかだとnの偶奇(もっと一般のケースもいけるみたいです)で結果を変えるようです。
-O0 と -O2 で実行時間が全然違ってしまいますが速くなる分にはいいんですよね。
コンパイラ関係はあまり深く学ばなかったとの、なにぶん10年以上のブランクがあるので、
どの程度の難しさの問題なのかもわからないのです。
定数最適化、なんでしょうか?
while文が終わるとすれば0しかありえないですが、while文の停止性まで最適化器が判断できるのか疑問だったのです。
追伸:
int f(int n) { while (n=n-2) {} return n; } main() { f(-2); }
とかだとnの偶奇(もっと一般のケースもいけるみたいです)で結果を変えるようです。
-O0 と -O2 で実行時間が全然違ってしまいますが速くなる分にはいいんですよね。
369デフォルトの名無しさん
2013/11/10(日) 21:40:38.13 GCCはどうだか知りませんのでドラゴンブックレベルの一般論ですが、
ループ最適化は普通にやるので、条件式は判断します。
制約条件がそこではっきりするので最終的には通常の定数最適化
パスで消えてるんじゃないでしょうか。
ドラゴンブックに書いてなかったっけ?
停止性が判断できるかという疑問ですが、判断できなければ
最適化はやらないということになるはずです。
逆に聞きたいのですが、ヒューリスティックに何かできる
んでしょうか? 実行時判断みたいなもの?
ループ最適化は普通にやるので、条件式は判断します。
制約条件がそこではっきりするので最終的には通常の定数最適化
パスで消えてるんじゃないでしょうか。
ドラゴンブックに書いてなかったっけ?
停止性が判断できるかという疑問ですが、判断できなければ
最適化はやらないということになるはずです。
逆に聞きたいのですが、ヒューリスティックに何かできる
んでしょうか? 実行時判断みたいなもの?
370デフォルトの名無しさん
2013/11/10(日) 23:40:22.44 前半はなんとなくわかりました。ドラゴンブックは多分実家にあるので参照できませんが、、、
後半ですが、誤用かもしれませんが経験則の意味で使いました。
停止性は当然一般には判断できないので、どんな経験則を使ってるのかな、ってぐらいで、
深い意味はなかったです。
後半ですが、誤用かもしれませんが経験則の意味で使いました。
停止性は当然一般には判断できないので、どんな経験則を使ってるのかな、ってぐらいで、
深い意味はなかったです。
371デフォルトの名無しさん
2014/01/04(土) 22:39:03.46 ドラゴンブックってなーに
372デフォルトの名無しさん
2014/01/04(土) 23:07:48.15 ぐぐれ
373デフォルトの名無しさん
2014/01/06(月) 14:56:20.27 教科書的な最適化はやってないと思うよ
374デフォルトの名無しさん
2014/01/06(月) 23:57:03.34 >>365
ブロック内の変数に関数外の部分から影響を受けるかどうか(volatileやrestrictじゃないメモリ参照とか)のフラグを用意して、
外部の影響を受けない変数や定数から構成された条件式は停止時の条件が計算できる可能が高いので最適化を試みるとか。
似たような考え方でブロックが(大域変数などに)副作用を与えるかどうかを判断すれば簡略化やコードの削除ができるんじゃない?
ブロック内の変数に関数外の部分から影響を受けるかどうか(volatileやrestrictじゃないメモリ参照とか)のフラグを用意して、
外部の影響を受けない変数や定数から構成された条件式は停止時の条件が計算できる可能が高いので最適化を試みるとか。
似たような考え方でブロックが(大域変数などに)副作用を与えるかどうかを判断すれば簡略化やコードの削除ができるんじゃない?
375デフォルトの名無しさん
2014/01/09(木) 18:39:35.49376デフォルトの名無しさん
2014/01/09(木) 19:05:21.73 >>365
l1: --n;
if (n != 0) goto l1;
return n;
不変式解析で、
l1: --n;
if (n != 0) goto l1;
return 0;
nの非到達性で、
return 0;
l1: --n;
if (n != 0) goto l1;
return n;
不変式解析で、
l1: --n;
if (n != 0) goto l1;
return 0;
nの非到達性で、
return 0;
377デフォルトの名無しさん
2014/01/09(木) 23:33:20.23 >>375
おもしろそうですね
おもしろそうですね
378デフォルトの名無しさん
2014/01/22(水) 22:45:26.19 libdwarfがELFに依存してて泣ける…
Windows(MinGW)だとPE+DWARFだから使えないのが残念
MinGWのobjdump.exeは自力で解析してるから、ソースを参考にすれば
なんとかなりそうだけどDWARFの知識が必要になるし…
Windows(MinGW)だとPE+DWARFだから使えないのが残念
MinGWのobjdump.exeは自力で解析してるから、ソースを参考にすれば
なんとかなりそうだけどDWARFの知識が必要になるし…
379デフォルトの名無しさん
2014/01/22(水) 23:18:17.02 libdwarfをPE対応にしてupstreamにパッチ投げれば
他の人も幸せになれるんでないの
他の人も幸せになれるんでないの
380デフォルトの名無しさん
2014/01/22(水) 23:46:19.90 正直libdwarf内で最低限のELFエミュレーションをしようと思ってソース
見たけどめげた…ごめんよ
とりあえずobjdump.exeがやってるDWARF解析部分を解析してみるよ
それでDWARFになじんだらまたトライしてみたい
見たけどめげた…ごめんよ
とりあえずobjdump.exeがやってるDWARF解析部分を解析してみるよ
それでDWARFになじんだらまたトライしてみたい
381デフォルトの名無しさん
2014/02/13(木) 21:57:38.58 どうでもいいがCentOS最近入れたらデフォルトではインスコされてないんだな
gccのないLinuxなんてLinuxじゃないやい
gccのないLinuxなんてLinuxじゃないやい
382デフォルトの名無しさん
2014/02/13(木) 22:29:35.18 CentOSのGCCは糞古いから最初から入ってなくても問題無い
ただ新しいのを入れるには色々手間は掛かる
ただ新しいのを入れるには色々手間は掛かる
383デフォルトの名無しさん
2014/02/13(木) 22:46:51.56 3回コンパイルすりゃいいだけだろ
384片山博文MZ無能 ◆T6xkBnTXz7B0
2014/02/14(金) 19:50:03.01 gccとg++は最近不具合があるから、clangに乗り換えることにした。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】「女芸人No.1決定戦 THE W」9代目女王にニッチェ! 7年ぶり3度目で悲願の優勝 [牛丼★]
- 731部隊の新資料、中国が公開 「日本が細菌戦の罪を自白」と主張 ロシアが引き渡し [少考さん★]
- 中国・ロシア両軍の爆撃機が東京方面へ向かう「異例のルート」を共同飛行…核も搭載可能、連携して威嚇か ★7 [ぐれ★]
- 【広島】ペルー女性の国保加入を誤って認め、福山市が医療費484万円を肩代わりするミス…入院して手術を受ける [ぐれ★]
- 東京の自販機そばに金塊4200万円分、何者かに持ち去られる…札幌の50代が8000万円振り込んだ後に上京して被害 [どどん★]
- 山田邦子 ひょうきん族時代の年収は12億円「ただ税金が80%」 [muffin★]
- テメェは俺を怒らせたオラァ👊💢😅💢👊🏡
- 泊まったペンションで殺人事件が起きて外部と連絡もできないときってどうしてる?? [793117252]
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪
- ブレイキングダウンの前日記者会見ビンタされて失神してる奴出てるやん
- おさかなさんあつまれえ
- 中国 わりとオブラートに包んでわーくにを牽制してしまう「軍国主義復活の企みは失敗する」 [163661708]
