GCCについて part10at TECH
GCCについて part10 - 暇つぶし2ch1:デフォルトの名無しさん
11/09/03 14:13:04.14
史上最強かもしれなかったツール、GCC(GNU Compiler Collection)について語るスレ。

GNU本家のGCCページ
URLリンク(gcc.gnu.org)

Binutils - Collection of binary utilities ←これも必要だぞ。
URLリンク(www.gnu.org)

GNU Binutils
URLリンク(sources.redhat.com)

GCC online documentation
URLリンク(gcc.gnu.org)

Installing GCC
URLリンク(gcc.gnu.org)

GCC Timeline
URLリンク(gcc.gnu.org)

Calendar
URLリンク(gcc.gnu.org)

前スレ
GCCについて part9
スレリンク(tech板)

関連スレ
【最速へ】LowLevelVirtualMachine【LLVM】
スレリンク(tech板)

2:デフォルトの名無しさん
11/09/03 17:04:19.11
ストラウストラップ本は、あれプログラミング初心者向けの本じゃないから注意な
中級者が現実的なプログラミングの方法を学ぶ為の本であって

3:デフォルトの名無しさん
11/09/03 17:12:55.71
初心者って何の?
CやJavaは知ってるが、これからC++をやろうって言う人にはうってつけのような・・・

4:デフォルトの名無しさん
11/09/03 18:03:27.53
俺にはプログラミングの初心者って書いてあるように見えるが…?

5:デフォルトの名無しさん
11/09/03 18:16:27.85
>本書はその原則を実際に展開しながら「プログラミングとはなにか」「どうやってプログラミングを学習するか」を
>平易に解説してゆく。何度も挫折を繰り返した学習者や、原点に立ち戻り「プログラミング」を深めたい実務者など、
>すべての開発者必読の1冊である。

と、あるよ?

6:デフォルトの名無しさん
11/09/03 18:19:25.36
>>2
プログラミングの初心者は現実的なプログラミングを学んじゃいけないの?

7:デフォルトの名無しさん
11/09/03 18:27:43.87
まぁ あの本はストラウストラプ先生(長い)の
ありがた~い言葉を入門者のように素直に聞くというのが
いいかと。
神の声のような感じでうっとりですよw

でも int char double string if switch while for vector ってな
感じでポンポン出て来て、リズムがいいっすね。
ほんとにC++はツールとして選んだって感じです。

8:デフォルトの名無しさん
11/09/03 18:29:48.06
一冊くらいはびよーんすぽっすぽっの本も読んでみるか。

9:デフォルトの名無しさん
11/09/03 19:26:15.61
前スレ>>999
いや時代遅れで役に立たない本だ、とか言いたかったわけじゃなくて
単純に>>976が勘違いしてそうだったので。

10:デフォルトの名無しさん
11/09/03 23:44:24.91
禿があれ書いた時は、ああもうC++0xが確定寸前でやることないから、
プログラミング入門でも書く気になったのかなと思った。
もちろんそれは気のせいだった。

11:デフォルトの名無しさん
11/09/04 01:49:11.78
>>3-5
とんでもない誤解だよ
URLリンク(d.hatena.ne.jp)

12:デフォルトの名無しさん
11/09/04 01:58:49.57
>ただ「プログラミングを始めるための最もやさしい本ではない」訳で、
>何かしらの開発経験はあるけど色々と足りない部分を痛感しているような人なら本書で独習することも可能だろうが、
>それよりも経験値が不足している人やプログラミング未経験の人が独習用に使うのは避けたほうが無難だろう

ふ~ん。(゚σ ゚)ホジホジ

13:デフォルトの名無しさん
11/09/04 02:52:57.76
まえがきからの抜粋に文句つけられても・・・

>本書はプログラミングを始めるための最もやさしい本ではないし、そのようなつもりで書いていない。
>著者が目指したのは、現実のプログラミングの基礎を最も簡単に学べる本である。
>現実のソフトウェアの多くがほんの数年前まで高度であると見なされていた技術に基づいていることを考えれば、実に意欲的な目標ではないか。
>基本的には、他の人が使用するためのプログラムを書き、それを責任を持って行い、
>それなりの品質を維持したいと考えていることが前提となる。
>つまり、プロとして恥ずかしくないレベルを目指しているものと想定する。
>そこで、本書では教えたり学んだりするのがやさしいものではなく、
>現実のプログラムに取り組むために必要なものがカバーされるように話題を選んだ。

14:デフォルトの名無しさん
11/09/04 03:34:40.08
あえて入門書というカタチを取ったおかげで
言葉や想いが伝わりやすくなってる気がする。
でも その言葉は熱く優しく気高い。

15:デフォルトの名無しさん
11/09/04 13:22:41.77
まあ独学でやるにはそれなりのプログラミング経験は必要ってこったな

16:デフォルトの名無しさん
11/09/07 02:27:29.37
趣味ならrubyなりnode.jsなり、もっと良い言語があるのにな

17:デフォルトの名無しさん
11/09/07 17:31:07.36
釣られませんよ

18:デフォルトの名無しさん
11/09/12 13:33:25.48
unused but set variablesって4.6以降エラー扱いがデフォになってるみたいだけど、
これって弾かないといけないくらい有害なの?
いまいちデメリットがよくわかんないんで誰かヒントくれ。

19:デフォルトの名無しさん
11/09/12 14:45:09.25
弾込めたら弾かないと

20:デフォルトの名無しさん
11/09/12 16:53:41.85
無駄な変数宣言しとるで
って、だけじゃあ
違うかな

21:デフォルトの名無しさん
11/09/12 19:14:40.83
その程度で警告じゃなくてエラー扱いはやりすぎだからなんか深い理由があるの?
>>18は聞いてるようだが

22:デフォルトの名無しさん
11/09/12 20:01:04.29
引数の未使用でもエラー吐くの?

23:デフォルトの名無しさん
11/09/12 20:03:57.34
無能って教えてくれてるんじゃあ、コンパイラが

24:デフォルトの名無しさん
11/09/12 20:10:01.63
バグのあらわれだったりすることはあるよね。

25:デフォルトの名無しさん
11/09/12 20:16:15.63
-Wunused-parameter
つけんと特に怒らんけどね、コンパイラ

26:デフォルトの名無しさん
11/09/12 21:13:48.24
-O2 -Wall -Werrorあたりよくわからんまま適当につけて
怒られているとエスパーしてみる


27:デフォルトの名無しさん
11/09/12 23:10:36.24
-Werror=unused-but-set-variable
#: c-decl.c:1183
#, gcc-internal-format
msgid "variable %qD set but not used"
msgstr "変数 %qD が設定されましたが使用されていません"

28:デフォルトの名無しさん
11/09/25 03:08:05.57
質問です

gcc4.6.1(MinGW)でRaw string literalで R[]で囲もうとするとコンパイルエラーになります
R()で囲むとコンパイルが通るのですが、どちらが正しいのでしょうか?

29:デフォルトの名無しさん
11/09/25 03:12:44.02
R"( )" で囲むのが正しいよ
R"hoge( )hoge" とかで囲んでもいいけど

R[ ] も R( ) もコンパイル通らない

30:デフォルトの名無しさん
11/09/25 03:13:51.73
>>29
ありがとうございます
早くc++11の規格表が欲しくなりますね

31:デフォルトの名無しさん
11/09/25 03:14:04.05
あ、しまった
sageます

32:デフォルトの名無しさん
11/09/25 03:14:42.11
FDISはもう落とせないからねえ

33:デフォルトの名無しさん
11/09/25 03:15:29.50
はい
FDISはいりません
正規のPDFを購入予定です

34:デフォルトの名無しさん
11/09/26 10:50:49.10
そのうちANSI版が安く出るでしょ。(ISO版は高いけど)

35:デフォルトの名無しさん
11/09/27 02:14:55.66
やっとリポに4.5.3来た
4.4.5 → 4.5.3 ビルドしてきます

36:デフォルトの名無しさん
11/10/02 16:37:36.59
共有ライブラリのリンクの方法に関する
正式なドキュメントってどこにあるんでしょう?

GCC online documentation
URLリンク(gcc.gnu.org)

ここのどのバージョンでもいいですけど
リンクオプションのページを見ても
-l の説明にはスタティックライブラリの
ことしか載ってないですよね?

今まで普通に -l で共有ライブラリのリンクも
指定して特に問題なく実行できていたのですが
一度ちゃんと仕様を確認しておこうと思ったら
どこにもないのですが…

それとも単純にスタティックの場合の記述を
共有の場合にも適用してしまっていいということでしょうか?

ご存知の方いましたら教えてください

37:デフォルトの名無しさん
11/10/02 17:23:46.23
>>36
共有ともスタティックとも書かれていないような。
URLリンク(gcc.gnu.org)

38:デフォルトの名無しさん
11/10/02 17:27:24.26
>>37
-l の説明の最後に

... with `lib' and `.a' and searches several directories.

とあったので拡張子からしてスタティックのことだと思ったのですが
そういうわけではないのでしょうか?

39:デフォルトの名無しさん
11/10/02 17:36:46.07
man ldしな。gccはコンパイラやリンカをそこそこよろしいオプションで起動するドライバ。
例外投げる共有ライブラリを使う場合は-static-libgccは使わない方がいい。

本当に詳しく知りたいならbinutils側のドキュメントと現在の実装度、
使うオブジェクトファイル形式の仕様、OS側のライブラリ管理方式、
自分の使うgccのspecsファイルを見れば何したらどうなるか分かる。

40:デフォルトの名無しさん
11/10/02 18:09:29.22
man ld はCentOS5で確認済みでしたが、共有ライブラリに関することは
載っていませんでした。(むしろスタティック限定とも取れる書き方)

…が、ネットでいくつか検索してみたところ、例えば

URLリンク(www.sra.co.jp)

では

> -larchive
> --library=archive
> 共有ライブラリをサポートしているシステムでは, ld は, 拡張子が .a 以外のライブラリをも検索する.
> 特に, ELF システムと SunOS では, ld はあるディレクトリでライブラリを検索する時, 拡張子が .a の
> ものよりも先に拡張子が .so のものを 探す. 約束により, .so という拡張子は共有ライブラリを表す.

という記述があり、一応スッキリしました。
(割と重要な情報だと思いますが、マニュアルに必ずしも記述されてないようですね)


binutilsをはじめとするその他ドキュメントについても確認してみます。
どうもありがとうございました。

41:デフォルトの名無しさん
11/10/02 18:39:47.33
GCCはmanpageは参考程度と思え、とどっかで読んだ記憶がある

42:デフォルトの名無しさん
11/10/02 18:46:41.29
今のbinutilsのmanなら-l namespecで同じ記述がある筈なんだけどなあ
CentOSのパッケージの都合でもあるのか

>>41
逆にさんざん探して無いと思ってた情報がmanに載ってる場合も

43:デフォルトの名無しさん
11/10/02 18:51:17.70
gcc -Wl,--verbose ほげほげ

44:デフォルトの名無しさん
11/10/03 00:59:51.12
>>40
> On systems which support shared libraries, ld may also search for
> files other than libnamespec.a. Specifically, on ELF and SunOS
> systems, ld will search a directory for a library called
> libnamespec.so before searching for one called libnamespec.a. (By
> convention, a ".so" extension indicates a shared library.) Note
> that this behavior does not apply to :filename, which always
> specifies a file called filename.

manpageにこの記述がないbinutilsのバージョンは何?


45:横レス
11/10/03 01:24:26.74
説明
ld は複数のオブジェクトファイルや書庫 (archive) ファイルを結合し、それ
らのデータをリロケートして、シンボルの参照をまとめる。新たな実行プロ グ
ラ ムをコンパイルして作成する作業の最終ステップは、多くの場合 ld の呼び
出しとなる。

ld はリンカコマンド言語のファイルを受け付ける。このファイルでリンク処理
を明示的に、また完全に制御することができる。この man ページではコマンド
言語を説明していない。コマンド言語や GNU リンカのその他の内容に関する詳
細 は info の `ld' エントリか、マニュアルである ld: the GNU linker を参
照すること。

ld の本バージョンではオブジェクトファイル関連の作業に汎用の BFD ライ ブ
ラ リを用いている。これによって ld では多くの異なるフォーマットのオブジ
ェクトファイルを読み、書き、結合することができるようになっている ( 例え
ば COFF や a.out)。異なるフォーマットをリンクして、あらゆる種類のオブジ
ェクトファイルを作成できる。サポートされているフォーマットや関連する ア
ーキ テ ク チ ャに 関しては ` objdump -i' を実行すればよい。詳細は obj-
dump(1) を見よ。

GNU リンカは柔軟であるだけでなく、診断 (diagnostic) メッセージも他の リ
ン カより詳しい。多くのリンカはエラーが生じるとすぐに動作を停止してしま
うが、 ld は可能な限り処理を続け、他のエラーに関しても知らせようとす る
( あるいはエラーにもかかわらず出力ファイルを作成してしまうことさえある)


GNU リンカ ld は多くの状況をカバーするように作成されている。また他の リ
ン カとできる限り互換性を保つようにしてある。したがって ld の振る舞いは
、コマンドラインや環境変数によって細かく制御できるようになっている。


46:デフォルトの名無しさん
11/10/05 21:17:11.75
Merging In The GNU D Language Compiler To GCC
URLリンク(www.phoronix.com)

D言語、いらっしゃい

47:デフォルトの名無しさん
11/10/09 19:40:37.99
objdumpでx86-64のバイナリモードで逆アセンブルしたいんだけど上手くいきません
$ /usr/local/bin/objdump -D -m x86-64 -b binary a.exe

a.exe: file format binary

/usr/local/bin/objdump: can't use supplied machine x86-64

-m i8086
-m i386
では上手くいきますが-m x86-64は逆アセンブルしてくれません
なんででしょうか?
obudump -d a.exeとすれば普通にx86-64を逆アセンブルしてくれます

48:デフォルトの名無しさん
11/10/09 19:48:38.09
-m i386:x86-64 -b binary ...
これで上手くいきました・・・すいませんでした

49:デフォルトの名無しさん
11/10/28 16:11:17.24
4.6.2

50:デフォルトの名無しさん
11/11/22 22:16:04.41
Binutils 2.22 released

51:デフォルトの名無しさん
11/11/23 06:13:33.85
すいません
リンカ(ld)のオプション-Rについて教えてください
マニュアルには「シンボル名とそのアドレスを filename から読み込む.」
とありますが、
これはライブラリのあるフォルダを指定しているということでしょうか?
とすると、gccの-Lや-lはなんのために有るのでしょうか?

52:デフォルトの名無しさん
11/11/23 07:00:06.55
-l LIBNAME, --library LIBNAME
Search for library LIBNAME
-L DIRECTORY, --library-path DIRECTORY
Add DIRECTORY to library search path
-R FILE, --just-symbols FILE
Just link symbols (if directory, same as --rpath)
-rpath PATH Set runtime shared library search path

53:デフォルトの名無しさん
11/11/23 21:57:03.33
>>52
ん?
よくわからないです。
例えば
cc -L/usr/pkgsrc/bootstrap/work/wrk/pkgtools/pkg_install/work/libarchive/.libs
  -L/usr/pkgsrc/bootstrap/work/wrk/pkgtools/pkg_install/work/libfetch
-L/usr/pkgsrc/bootstrap/work/wrk/pkgtools/pkg_install/work/libnbcompat
-Wl,-R/usr/pkg/lib -L../lib -o pkg_add main.o perform.o
-linstall -lfetch -larchive -lbz2 -lz -lnbcompat -lnbcompat
を実行すると、
../lib/libinstall.a(parse-config.o): In function `pkg_install_config':
parse-config.o(.text+0x3f6): undefined reference to `fetchConnectionCacheInit'
と言うエラーが出ます。
原因は、
-R/usr/pkg/libのところで、/usr/pkg/libというディレクトリが存在していないためだと思われるのですが、
-Wl,-R/usr/pkgsrc/bootstrap/work/wrk/pkgtools/pkg_install/work/libarchive/.libs
-Wl,-R/usr/pkgsrc/bootstrap/work/wrk/pkgtools/pkg_install/work/libfetch
-Wl,-R//usr/pkgsrc/bootstrap/work/wrk/pkgtools/pkg_install/work/libnbcompat
-Wl,-R../lib
と追記した所、
cc:-R/usr/pkgsrc/bootstrap/work/wrk/pkgtools/pkg_install/work/libarchive/.libs
linker input files unused sinece linking not done
と出て、失敗してしまいました。
解決策は、/usr/pkg/libを作ってそこにlib**をコピーすれば良いかなとも思ったのですが、
これで良いでしょうか?

54:デフォルトの名無しさん
11/11/23 22:24:14.63
>>53
>よくわからないです。
ド素人が何をしてるのか、わかる人がいるとは思えんけど

--rpathってのは、暗黙にリンクされるlibファイルの場所を指定するんだけど
(俺もよくわかってないので雰囲気でわかって頂戴)

-Lはlibのある場所を指定するところ

libhoge.aをlinkしたいとき、フルパスで指定すると
ほげほげ/libhoga.a
と書くところを
-Lほげほげ -lhoge
って、書けるっていうだけ

libの依存関係によっては、書く順番によってはエラーになることがある

実績のあるtar玉から
configure,makeして何やってるか、見て見るところから始めたら

言葉で覚えるより出来合いのもの見て覚えるほうを個人的にオススメする

55:デフォルトの名無しさん
11/11/28 02:49:40.60
すいません。教えてください。
BSD/OSにてpkgsrcをコンパイルしています。
gccのバージョンは
Using builtin specs.
gcc version 2.95.3 20010315 (release)
です。
何度か/usr/pkgsrc/bootstrap/bootstrapを行っていて、
失敗するごとに、ソースの修正→/usr/pkgsrc/bootstrap/cleanup→/var/dbの削除を行って
再度/usr/pkgsrc/bootstrap/bootstrapを行うという繰り返しで進んでいます。
/usr/pkgsrc/bootstrap/work/wrk/pkgtools/pkg_install/work/pkg_install-20110805/addというディレクトリで
cc -L/usr/pkgsrc/bootstrap/work/wrk/pkgtools/pkg_install/work/libarchive/.libs
-L/usr/pkgsrc/bootstrap/work/wrk/pkgtools/pkg_install/work/libfetch -L/usr/pkgs
rc/bootstrap/work/wrk/pkgtools/pkg_install/work/libnbcompat -Wl,-R/usr/pkg/lib
-L../lib -o pkg_add main.o perform.o -linstall -lfetch -larchive -lbz2 -lz -lnb
compat -lnbcompat
../lib/libinstall.a(parse-config.o): In function `pkg_install_config':
parse-config.o(.text+0x3f6): undefined reference to `fetchConnectionCacheInit'
../lib/libinstall.a(pkg_io.o): In function `fetch_archive_open':
pkg_io.o(.text+0x19): undefined reference to `fetchXGet'
というエラーが発生しました。


56:デフォルトの名無しさん
11/11/28 03:53:25.95
エラーメッセージの内容が理解できないの
としか、いえんな

57:デフォルトの名無しさん
11/11/28 08:57:15.07
何カ所でマルチポストしてるんだよこいつ

58:デフォルトの名無しさん
11/11/28 15:50:55.67
BSDIってまだサポートされてるのとかgcc-2.95とかそれでもマルチとか驚愕

59:デフォルトの名無しさん
11/11/28 17:56:22.57
autotoolsで作ってる共有ライブラリを
fprofile-generate、fprofile-useを使って
最適化する方法の詳細な記事を書いてください。


60:デフォルトの名無しさん
11/11/28 17:59:00.69
?URLリンク(d.hatena.ne.jp)

61:デフォルトの名無しさん
11/12/02 12:35:51.36
私は高校2年の女子です。
C言語の勉強をしています。
次のようなプログラムを書きました。

#include <stdio.h>
#include <curses.h>
int main()
{
int x;
getch("%u", x);
printf("%\n", x);
return 0;
}

コンパイルエラーが
error: macro "getch" passed 2 arguments, but takes just 0
と、出ました。
/usr/include以下にcurses.hがあることは確認済みです。
原因と対策を教えてください。

62:デフォルトの名無しさん
11/12/02 13:43:09.47
error: macro "getch" passed 2 arguments, but takes just 0

63:デフォルトの名無しさん
11/12/02 13:44:58.01
エラーメッセージを読め。読み方がわからなければ先生に聞け。
getch()に引数は不要。他の関数と間違えてる?

64:デフォルトの名無しさん
11/12/03 01:51:07.80
エラーメッセージ、本当は error: の前に "なんとか.c:6:14 " みたいなのがあるはずだが。
それに本当にcursesでプログラムを書きたいのかと。

もしこれが真面目な質問なら、C言語の質問をするようなスレで、どんなプログラムを
作りたいのか説明して質問した方がいいと思う。
本当にcursesを使うならUNIX系の人じゃないと知らないかもしれんけど。

65:デフォルトの名無しさん
11/12/04 06:50:41.64
初心者ですみません

Cygwin で gcc を使ってます
assert() を使用すると undefined reference to `_assert'
エラーが出て困ってます

どなたかご教授頂けると幸いです

66:デフォルトの名無しさん
11/12/04 07:23:22.03
#include <assert.h>してある?

67:デフォルトの名無しさん
11/12/04 10:45:39.26
>>66
ビンゴでした(;^ω^)

68:デフォルトの名無しさん
11/12/08 23:11:00.34
gccというかautotoolsなのですが
./configure --build=x86_64-w64-mingw32
と毎回指定するのが面倒なので、環境変数で指定できないでしょうか?


69:デフォルトの名無しさん
11/12/09 02:11:26.49
alias conf='./configure --build=x86_64-w64-mingw32'
とでもしとけばいいんじゃね?

70:デフォルトの名無しさん
11/12/09 02:22:58.33
config.niceを拾っておいて2回目以降はそれ使わね?

71:デフォルトの名無しさん
11/12/09 02:42:43.54
>>70
config.niceって初めて知った。
ググるとPHPやApacheで使われているもののように見えるけど、よくわからん。

72:デフォルトの名無しさん
11/12/09 17:49:05.22
>>70
head config.log
してたわ~と思ったけどそんなファイルできないぞ
どうもautoconfの機能ではなく、configure.acに自分で処理書いて生成してるっぽいが


73:デフォルトの名無しさん
11/12/10 23:10:38.16
SandyBridgeでg++ -march=native -mtune=native で作ったバイナリって
Core2とかじゃ動かないみたいなんだけど、どのオプションでどれで動くかって
表か何かない?

74:デフォルトの名無しさん
11/12/11 03:28:34.47
>>73
nativeだとAVX(-mavx)が入るからだろ
-march=core2にしたらいいよ
オプションはこれででる
URLリンク(d.hatena.ne.jp)

75:デフォルトの名無しさん
11/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

76:デフォルトの名無しさん
11/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は指定しないか
対象が分かっているならその中で一番機能が少ないプロセッサに合わせて設定したほうがいいかと


77:デフォルトの名無しさん
11/12/16 21:45:35.33
普段Pythonを使っているんだけど、gcc on LinuxでCで何かの分野の処理をやるとしたら何の分野がいいかな?
コーディングがマゾい奴はやりたくない。うひょー、コーディング楽しいって感じの週末にしたい。

78:デフォルトの名無しさん
11/12/16 22:57:34.93
フィボナッチ数でも計算してろ

79:デフォルトの名無しさん
11/12/17 04:10:44.29
wxPython と wxWidgets のバインディングが出来るツールをおながいしまつ

80:デフォルトの名無しさん
11/12/22 10:18:33.81
windows7にしたらResource temporarily unavailableエラーが頻出するようになったんだけど
どういうことこれ

81:デフォルトの名無しさん
11/12/22 12:07:36.06
Cygwin使っているならCygwin固有の問題

82:デフォルトの名無しさん
11/12/28 14:50:50.96
問題だね(´・ω・`)

83:デフォルトの名無しさん
11/12/31 16:04:05.91
問題と思うから問題になる
問題と思わなければ問題ない

84:デフォルトの名無しさん
12/01/01 19:14:46.19
>>81
win7からメモリ管理の方式が変わったらしいし
たぶんメモリアクセスのコンフリクトだと思うんだけど
直し方がなあ
コンパイルするたびにがちゃがちゃとエラーで止まるのが非常にうざい

85:デフォルトの名無しさん
12/01/02 13:01:35.03
具体的に
何やったら、こうなった
って、かいてほしいな

86:デフォルトの名無しさん
12/01/03 12:16:02.83
Cygwin + MinGW + GCC 相談室 Part 6
スレリンク(tech板)
というのがある。

87:デフォルトの名無しさん
12/01/03 13:21:45.30
4.6.1の情報はドコで手に入りますか?

88:デフォルトの名無しさん
12/01/03 20:06:07.38
tar玉に入ってるだろ

89:デフォルトの名無しさん
12/01/05 18:39:50.52
最適化しても助長なコードを吐くことがあるのを見つけちゃったよ

90:デフォルトの名無しさん
12/01/05 19:35:52.48
んではそのケース用peephole optimizationを.mdに追加してくれ


91:デフォルトの名無しさん
12/01/05 19:44:12.02
え、秘密にしてちゃ駄目かな?

92:デフォルトの名無しさん
12/01/05 23:33:57.20
助長してくれるならいいことじゃないか

93:デフォルトの名無しさん
12/01/06 00:22:32.22
転送先に書いて、転送先から同じレジスタに書き戻すことがある
で、わかりますか?

94:デフォルトの名無しさん
12/01/06 14:47:54.30
ターゲット書かないのはターゲット非依存ってことなのか、今日日x86に決まってんだろうがってことなのか

95:デフォルトの名無しさん
12/01/06 15:14:17.60
複数archで確認してるよ、peephole2使って

96:デフォルトの名無しさん
12/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;
}

97:デフォルトの名無しさん
12/01/08 22:35:35.37
a=test(a);

98:デフォルトの名無しさん
12/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;
}

99:デフォルトの名無しさん
12/01/13 03:10:33.49
Commit: RX: Add return pattern
URLリンク(gcc.gnu.org)
gcc/function.cの
HAVE_return
HAVE_simple_return
の場合分けが悪いだけなのにね

ここに書いても無駄だと思うけど、なんとなく

100:デフォルトの名無しさん
12/01/13 14:29:13.06
>>99
特定アーキテクチャの問題で共通部分に手を出すのはむずいのでふ


101:デフォルトの名無しさん
12/01/13 15:20:26.40
特定アーキテクチャの問題
じゃあねえよ、ど素人が

102:デフォルトの名無しさん
12/01/14 14:19:50.12
>>101
んではRX以外に問題を起こしているアーキテクチャを挙げてくれ


103:デフォルトの名無しさん
12/01/14 17:37:33.78
他のアーキテクチャはmdいじくって、回避してるよ
どっちを修正すればいいかって話になるけど
function.cの該当部分書いたのがイマイチだって感じかな?

104:デフォルトの名無しさん
12/01/14 17:46:01.66
archによってはわざとmakeでコケるような細工してあることが注意したほうがいいよ

105:デフォルトの名無しさん
12/01/14 18:23:50.79
make の段階でこけるならまだ良心的だなw

106:96
12/01/22 23:41:41.30
遅くなりましてすみませんが
ご回答いただいた方ありがとうございました

107:デフォルトの名無しさん
12/01/27 16:04:12.55
これからは礼の言葉はいらん

108:デフォルトの名無しさん
12/02/28 18:10:21.39
対レジスタに関して演算結果で変化がないときは最適化してくれるけど
対メモリに対しては最適化されない時があるんだね、gcc

109:デフォルトの名無しさん
12/02/28 18:41:02.39
頑張っても同じって場合なんじゃない?

110:デフォルトの名無しさん
12/02/28 18:46:57.74
レジスタ使い回しが出来る奴はあんまり影響がないけど
メモリに依存したような奴は無駄なコードを吐いちゃうってことがある?ってことです

111:デフォルトの名無しさん
12/02/28 19:14:32.98
最適化レベル6にしてるか?

112:デフォルトの名無しさん
12/02/28 19:28:33.24
aliasある疑いがある時はちゃんとメモリアクセスしないと仕方ねえしな。

113:デフォルトの名無しさん
12/02/28 20:01:52.41
最適化レベル6ってどこのコンパイラのこと?

114:デフォルトの名無しさん
12/02/28 20:25:22.47
THINK Cだろ

115:デフォルトの名無しさん
12/02/28 22:09:56.74
Linux 0.99とかその辺の話じゃないの?

116:デフォルトの名無しさん
12/02/28 22:19:55.95
ワシの最適化は108まであるぞ

117:デフォルトの名無しさん
12/02/28 22:53:59.19
内部的には3まででしょ、gcc
-Oのあとの数字はなんでもうけつけるってだけで

最適化レベルっていっても細かなオプションが適時追加されるだけという

118:デフォルトの名無しさん
12/02/29 09:17:44.33
やたらでかい数字に意味があったのってEGCS時代ぐらいじゃね?

119:デフォルトの名無しさん
12/02/29 17:21:18.80
ぐらいだね

120:デフォルトの名無しさん
12/03/03 12:56:03.52
4.7.0

121:デフォルトの名無しさん
12/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


解決法探すコツみたいなものも教えていただけるとありがたい
ログが膨大で何に重点をおくべきかわからなくなってる

122:デフォルトの名無しさん
12/03/08 01:31:56.68
glibcのdevelみたいなのが入ってないような感じ、debian系はよー知らんけど
今のgccはビルドするときに必要なパッケージが増えてるから、ご注意を

URLリンク(packages.ubuntu.com)

123:デフォルトの名無しさん
12/03/08 07:45:36.03
>>121
Ubuntuにもmultiarch問題があるのか。

124:デフォルトの名無しさん
12/03/08 08:35:59.30
自分で答え書いてるやん

125:デフォルトの名無しさん
12/03/08 10:05:25.71
リナックスは問題だらけで使い物にならんよ。
リナックスがパッケージシステムが出来て糞になってる間に
windowsは安定してみんな使うようになった。

126:デフォルトの名無しさん
12/03/08 10:54:37.12
>>125 のようなバカが使ってるよな

127:デフォルトの名無しさん
12/03/08 10:59:19.59
メーカーがドライバーを作らないからな。
偽者のドライバーでは機能制限が多すぎて
最高のパフォーマンスを出すことは到底不可能だからな。

128:デフォルトの名無しさん
12/03/08 11:05:01.38
釣りにしてはネタが腐ってるような?

129:デフォルトの名無しさん
12/03/08 11:23:08.62
寿司じゃないんだから・・・・
それを言うならエサでしょう。あいにっく
釣りっぽい発言には見えないが・・・

130:121
12/03/08 14:24:03.17
パッケージのgcc4.6は入ってるから,glibc系の依存してるパッケージは入ってるはず.

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

ものすごく無理やりな感があって正しいのか不安だけど,とりあえず回答に感謝

131:デフォルトの名無しさん
12/03/09 01:27:12.80
multiarch問題は--libdir=/usr/lib/i386-linux-gnuで解決するんじゃないのか?

132:デフォルトの名無しさん
12/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.

勝手に作ったシンボリックリンク外してやってみる

133:デフォルトの名無しさん
12/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に出てこないから探しに行ってないんだよな
ここが解決すればよさそうな気もするのだけど.
このあたりの話題はスレ違いだろうか

134:デフォルトの名無しさん
12/03/09 22:25:33.52
64bitなgcc作りたいの?
なら、32bitな環境入れとかないとコケるような

135:デフォルトの名無しさん
12/03/09 22:34:00.66
いや,そも全部32bit環境…のはず.
i386,i686はアーキテクチャの差であってbit数は関係ないよね?

136:デフォルトの名無しさん
12/03/09 22:37:31.73
どこでコケてるのか、文章だけじゃ、わからないよ
rpmなら、specファイル見たらって言えるんだけど

137:デフォルトの名無しさん
12/03/09 22:56:36.35
あ,出てるエラーは>>121です
ldが/usr/lib/i386-linux-gnu/を見ずに/usr/libまでしか見てないらしくて
crti.oとかが無いと言われる
/usr/libから手動でシンボリックリンクを貼ってみたら一回通ったけど,
そうじゃなくてオプションでそちらを見る方法があるなら知りたい

直前のコマンドは引数多すぎて何をしてるのかよくわからないけど
(ビルドしてるディレクトリ)/gcc/xgcc
のようです

138:デフォルトの名無しさん
12/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の内容.

139:デフォルトの名無しさん
12/03/10 00:03:21.81
--disable-bootstapつけてやってみるとか、適当だけど
自分もその辺でハマった口だけど、
build.log見たりとか
コケたところを部分的に手動でやってみたりとか

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

4.6あたりで出来るか試してみるのも、ひとつの手

140:デフォルトの名無しさん
12/03/10 00:48:37.07
そりゃ、野良のldをmultiarch対応せずに使っているなら見ねーよな

141:デフォルトの名無しさん
12/03/10 00:56:54.52
いろんなアーキテクチャに対応するために
/usr/libにあったものを/usr/lib/(アーキテクチャ名)に移動してあるものがあって
ldもmultiarchに対応したものを指定してやらないとならない,ってことか

ldはbinutilsに含まれるってことで合ってる?
binutilsも新しいもの入れたつもりだけど,古いの呼んじゃってるかもしれないから
そのあたり調べてみる

142:デフォルトの名無しさん
12/03/10 00:58:53.88
本当にバカだな
意味が分からないなら、ubuntuのbinutilsつかってみろ
それで解決

143:デフォルトの名無しさん
12/03/10 01:03:33.54
Debianのgcc-4.7をリビルドして使おうとしないところが、頑なな奴だな。

144:デフォルトの名無しさん
12/03/10 01:26:26.28
>>142
Ubuntu,もしかしたらDebianからかもしれんけど
ディストリビューション特有の問題でそれに対応したのがちゃんと用意されてるから
素直にそれを使え,でいいんだろうか
とりあえず自分で入れたbinutils削除してld -vでfor Ubuntuの文字を確認してから
もう一度make中

>>143
Linux使い始めてそう経ってないから,常識をわかってないところは多々あると思うんで
そういうところこそ聞きたかった
4.7使いたいだけならgnuの素のソースだけじゃなくて,
Debianから試験的パッケージ出てたんだね
だめならこっち試してみる

145:デフォルトの名無しさん
12/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


146:デフォルトの名無しさん
12/03/22 23:22:47.12
GCC 4.7.0 released [2012-03-22]

147:デフォルトの名無しさん
12/03/25 01:22:03.60
__transaction_atomic の使い方がわからん
中に出てくる変数全部アトムボーイになるの?

148:デフォルトの名無しさん
12/03/25 01:32:10.51
超高速にシンタックスチェックだけしてくれるモードとか無い?

149:はちみつ餃子 ◆8X2XSCHEME
12/03/25 01:40:49.49
lint 使えよ。

150:デフォルトの名無しさん
12/03/25 11:27:59.90
>>148 -fsyntax-only

151:デフォルトの名無しさん
12/03/25 21:53:44.63
何の処理もせず、時間稼ぎをしたいとき、どのような方法がありますか?
例えば、キー入力を受け付けてから、5秒あけて、入力された内容を表示するという場合です

152:デフォルトの名無しさん
12/03/25 21:54:50.20
sleep(5);

153:デフォルトの名無しさん
12/03/25 22:58:58.43
>>147
gcc/testsuite/c-c++-common/tm/trxn-expr-2.c

154:デフォルトの名無しさん
12/03/25 23:48:00.43
>>153
__transaction_atomic (a+b+c);
これがどう働くのかを聞いてるんだよ・・・

155:デフォルトの名無しさん
12/03/26 00:25:25.52
>>154
噛み付かれても、俺もわからんのだけど
gcc gcc/testsuite/c-c++-common/tm/trxn-expr-2.c -S -fgnu-tm -O2
でもやって、自力で答え見つけたら
なんとなく、ポインターアクセス経由でやってるだけな感じだけど
(思ってる答えとは違うかもね)

156:デフォルトの名無しさん
12/03/26 17:18:46.67
gcc (GCC) 4.8.0 20120316 (experimental)

157:デフォルトの名無しさん
12/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のようにでてきます。



158:デフォルトの名無しさん
12/03/27 18:00:44.76
だって明示的にCPU指定したら命令セットは自明だろ
キャッシュサイズは個々に違うから指定されないわけで

159:デフォルトの名無しさん
12/03/27 19:31:02.63
そうか。㌧
ということは、corei7でmarch=nativeやmarch=corei7を使うと、
mfpmath=sseを使う意味はないという理解で大丈夫ですか?

160:デフォルトの名無しさん
12/03/28 13:32:02.99
>>159
定義済みマクロがあるやつは
cpp -march=core2 -dM < /dev/null | grep SSE
とかで分かるな



161:デフォルトの名無しさん
12/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は自分で付けなければいけないということなのか?

うむむむ




162:デフォルトの名無しさん
12/03/28 22:26:55.80
>>161
avxが有効だと__AVX__が1に定義されるから>>160でそれを調べたら分かるのでは

163:デフォルトの名無しさん
12/03/28 22:33:05.99
>>161
-marchや-mtuneは-msseや-mavxみたいなオプションのセットという認識だけどな
nativeの場合はプロセッサのフラグを呼んで有効になっている機能を使おうとするから
msseみたいな物が個別につくのでは
例えばKVMとかで仮想CPUの場合に、物理CPUにある機能が一部無効になってると個別のオプションが変わったりする


164:デフォルトの名無しさん
12/03/28 23:01:18.78
ぶっちゃけアセンブリ出力を見たらどうか

165:デフォルトの名無しさん
12/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;


166:営利利用に関するLR審議中@詳細は自治スレへ
12/03/29 12:06:21.03
SSEにしろAVXにしろ、OSが明示的に許可してないと使えないんだから
勝手に生成されたらまずいんでね

167:営利利用に関するLR審議中@詳細は自治スレへ
12/03/29 12:20:20.92
自分で指定しておいて勝手にとは如何に

168:営利利用に関するLR審議中@詳細は自治スレへ
12/04/09 10:04:51.69
gcc -Q --help=target -march=corei7-avx
でわかるね

169:営利利用に関するLR審議中@詳細は自治スレへ
12/04/09 15:45:06.79
現在時刻を端末上で、

○時○分○秒

と表示させるにはどのような関数があるでしょうか?
環境はlinuxです。

170:営利利用に関するLR審議中@詳細は自治スレへ
12/04/09 16:25:22.33
info gcc

そんな機能あるのか?

171:営利利用に関するLR審議中@詳細は自治スレへ
12/04/09 16:38:51.56
>>169
このへんから
URLリンク(linuxjm.sourceforge.jp)

172:営利利用に関するLR審議中@詳細は自治スレへ
12/04/09 17:14:32.47
>>170
若干ずれるがcppに頑張っていただけば

#include <stdio.h>
int main(void)
{
 puts(__TIME__);
}


173:営利利用に関するLR審議中@詳細は自治スレへ
12/04/09 17:53:35.07
>>172
なるほど、それをcppの代わりにインストールすればいいのか。

174:営利利用に関するLR審議中@詳細は自治スレへ
12/04/09 23:31:19.31
>>171
もうこんなの使うのやめなよ・・・

175:営利利用に関するLR審議中@詳細は自治スレへ
12/04/09 23:35:48.24
>>174
最近の事情はよー知らんので教えて欲しいな、どこ見りゃいいの?

176:営利利用に関するLR審議中@詳細は自治スレへ
12/04/09 23:50:52.52
>>175
下の方だよ

177:営利利用に関するLR審議中@詳細は自治スレへ
12/04/09 23:52:15.40
>>175
POSIX.1-2008 marks gettimeofday() as obsolete, recommending the use of clock_gettime(2) instead.

って書いてある。

178:営利利用に関するLR審議中@詳細は自治スレへ
12/04/09 23:54:59.95
>>177
ありがと

179:営利利用に関するLR審議中@詳細は自治スレへ
12/04/10 09:02:00.63
clock_gettimeは致命的な遅さ

180:営利利用に関するLR審議中@詳細は自治スレへ
12/04/11 00:27:36.86
>>179
じゃあどうすりゃいいんだよ!

181:営利利用に関するLR審議中@詳細は自治スレへ
12/04/11 00:50:43.92
どうやって測ったのか知らんけど
遅いっていうのなら、glibcのソース見て、自前で実装するしかないでしょ

182:営利利用に関するLR審議中@詳細は自治スレへ
12/04/11 07:08:36.38
get_wild関数で変数名がxyzです。
何が起こるでしょうか?

183:営利利用に関するLR審議中@詳細は自治スレへ
12/04/11 07:31:21.19
>>181
つまりclock_gettimeは使わないという結論か

184:営利利用に関するLR審議中@詳細は自治スレへ
12/04/11 14:43:38.38
>>183
time関係は遅いのかもしれんけど、今時の実行環境ならさほど問題になるようなことはない気がするけど
何をするかによっても関数の実行時間が問題になるかは変わってくるからね

185:デフォルトの名無しさん
12/04/12 01:36:44.09
>>182
アスファルトにタイヤを切りつける

186:デフォルトの名無しさん
12/04/12 12:34:06.48
>>182
プログラム「都市狩り」起動


187:デフォルトの名無しさん
12/04/12 12:35:16.88
>>182
プログラム「都市狩り」起動


188:デフォルトの名無しさん
12/04/12 22:37:53.88
>>182
恋人が交通事故死します。


189:デフォルトの名無しさん
12/04/15 18:17:28.30
冴羽遼は関係無いだろ

190:デフォルトの名無しさん
12/04/15 20:46:36.79
じゃあ何ならいいんだ

191:デフォルトの名無しさん
12/05/03 11:29:23.10
gccをビルドすると/usr/lib/に妙なperlかpythonのスクリプト(忘れた))が生成されるけど、あれ何するためのものなの?

192:age
12/05/03 11:31:53.03
GCC4.7でIntelコンパイラーのように__Cilk命令がマージされたような話を聞いたけど、これ本当にマージされてるの?
どうやったら動くの?何か特殊なビルドオプション等が必要?

193:デフォルトの名無しさん
12/05/04 00:57:31.93
?-gdb.py
消しても問題みたいだけど

194:デフォルトの名無しさん
12/05/04 01:00:40.04
逝ってるなコンパイラは逝ってるなことやってるんだ


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch