のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,833人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    私的良スレ書庫

    不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
    ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

    元スレGCCについて part9

    gcc スレッド一覧へ / gcc とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - std:map + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    901 : デフォルトの名無 - 2011/07/29(金) 07:53:41.70 (+70,+29,-6)
    >>900
    誰か試してる奴が居たら、聞きたいじゃん。
    うちではあまり効果無かった…。
    902 : デフォルトの名無 - 2011/07/29(金) 11:32:27.52 (+4,-29,-43)
    -Ofastとかしたの?
    LTOも試してみた?
    関数に最適化を助けるattribute付けてみた?
    903 : デフォルトの名無 - 2011/07/29(金) 19:00:59.52 (-6,-29,-3)
    -march=nativeでおk
    904 : デフォルトの名無 - 2011/07/30(土) 08:18:10.59 (+3,-29,-58)
    >>902
    -Ofast -march=native でやってみたけど、gcc 4.4 の吐くバイナリと速度は変わらなかったわ。
    ソフトウエアに激しく依存するだろうから参考にもならないだろうけど、
    ちょっと他の人の感想が聞きたかったんだよ。ごめんな。
    905 : デフォルトの名無 - 2011/07/30(土) 23:51:06.32 (+3,-29,-35)
    COMのIDispatchを書くのがめんどくさいんで、タイプライブラリから生成したいんだけど、
    そもそもGCCでタイプライブラリをどうやったら作れるのか解からん。
    IDLに相当するようなもんってツールチェインにあるの?
    906 : デフォルトの名無 - 2011/08/17(水) 20:56:26.54 (-1,-29,-45)
    米Intel、並列プログラミングのためのC/C++言語拡張「Cilk Plus」をオープンソース化。GCCへの実装も開始
    http://sourceforge.jp/magazine/11/08/17/0515246
    907 : デフォルトの名無 - 2011/08/21(日) 09:15:02.14 (+56,+28,-6)
    どうせ並列CPU持ってないと意味無いんだろ。
    908 : デフォルトの名無 - 2011/08/21(日) 10:21:17.18 (+3,-30,-77)
    gcc 4.6で、4.5まで作られてた例外テーブルの (関数名).eh ってラベルが作られなくなったせいか、
    Macでのldの-dead_stripで.eh_frameセクションごと丸ごとstripされてしまって例外が受け取れなくなってないか?
    ELFターゲットの--gc-sectionsのほうは大丈夫だった。

    俺まだLeopardなんで買い換えろボケって話かもしれないんで、誰かLionで試してはくれまいか。
    909 : デフォルトの名無 - 2011/08/21(日) 18:23:07.38 (-7,-30,-16)
    --strip-debug?
    910 : デフォルトの名無 - 2011/08/21(日) 18:45:23.03 (+3,-30,-66)
    いやいや-dead_stripは-dead_strip。使われてないシンボルを削除するもので
    動作自体はGNU ldの--gc-sectionsそのもの。
    Appleのldだとオプションが違うのよ。
    911 : デフォルトの名無 - 2011/08/21(日) 18:49:07.63 (-1,-29,-21)
    ldでstripしたことないな
    stripはstripでやってみたら
    912 : デフォルトの名無 - 2011/08/21(日) 18:57:41.89 (+3,-29,-30)
    だからstripじゃ無いんだよ。--gc-sectionsなんだよ。
    効果は、どこからも参照されてないシンボルを「コードごと」実行ファイルから取り除くもので
    stripにはこんな機能ないよ。Windows系のリンカで言うところのスマートリンクだよ。
    913 : デフォルトの名無 - 2011/08/22(月) 07:08:44.47 (+45,+27,-3)
    914 : デフォルトの名無 - 2011/08/22(月) 19:33:55.81 (+62,+29,-41)
    ですです。
    最初フロントエンドの問題かもと思ったけど、4.6.x全部でフロントエンド問わず発生するんで
    gcc全般について話せるところのほうがいいだろうと。とくれば英語苦手なんでこっちに来た。

    Simonさんに試してもらった範囲ではLionでは起きないってことで
    今はldのバージョンとの組み合わせ問題かなあ?と思ってるところ。

    条件がはっきりしたらgccのbugzillaに投げるから、誰か協力してくれない?
    915 : デフォルトの名無 - 2011/08/22(月) 21:30:52.40 (-5,-28,-1)
    gnatかいな?
    916 : デフォルトの名無 - 2011/08/22(月) 21:40:28.53 (-1,-29,-25)
    だからフロントエンド問わないって
    C言語の-fexceptionsモードでも再現するよ
    917 : デフォルトの名無 - 2011/08/22(月) 22:25:31.82 (+3,-29,-46)
    確認方法はこんな感じでいいですか?http://gist.github.com/1162352
    一応ldに-dead_stripを渡してみたけど、間違ってたらゴメン。
    ちゃんとした確認用ソースコードとコマンドラインがわかれば改めて試します。
    918 : デフォルトの名無 - 2011/08/22(月) 22:35:38.49 (+57,+29,-14)
    あー、動いてますね……。
    確認方法はそれでいいです。

    やっぱ単にいつまでもLeopardにしがみついてないで買い換えろボケって話か……orz
    919 : デフォルトの名無 - 2011/08/22(月) 22:50:10.17 (+9,-30,-147)
    一応Leopardのldの何がまずいかを詳しく書いておくと、__eh_frameって例外情報のセクションが
    「-dead_strip」使用、かつ「(関数名).ehってラベルを持っていないとき」限定で、リンクされない(実行ファイルから除かれてしまう)
    gcc 4.5までは (関数名).eh ってラベルが生成されてたんだけど、4.6から生成されなくなった。

    セクションの有無はsize -mか、GNU binutilsを入れているならobjdumpで確認可能、参考まで。

    バグレポートするかどうか悩む……。
    あとsage忘れに気付いたごめんなさい。
    920 : デフォルトの名無 - 2011/08/23(火) 00:01:53.37 (+10,-30,-67)
    >>919
    Appleのldはソースが公開されているので、ひとまずそれを手元の環境でコンパイルして試すというのはどうでしょう?
    http://www.opensource.apple.com/source/ld64/ld64-123.2.1/
    ChangeLogを読むと修正内容に-dead_stripやdead strippedなどと書かれてますね(内容は確認してないです)。
    921 : デフォルトの名無 - 2011/08/23(火) 13:35:05.36 (+37,+9,-18)
    objdumpは標準入力からデータを受けとるようなことは出来ますか?
    見た感じファイルから読み込まなければならないような作りに見えますが
    922 : デフォルトの名無 - 2011/08/23(火) 18:38:29.49 (-1,-29,-2)
    cat a.out |objdump -d
    これで普通に出たけど
    923 : デフォルトの名無 - 2011/08/23(火) 18:51:34.83 (-1,-29,-17)
    それ,objdumpがobjfileを指定されていないときにデフォルトでa.outを読むから
    924 : デフォルトの名無 - 2011/08/23(火) 19:16:46.30 (+3,-30,-34)
    本当だ
    ソース見る限り方法はなさそう

    if (optind == argc)
    display_file ("a.out", target);
    else
    for (; optind < argc;)
    display_file (argv[optind++], target);
    925 : デフォルトの名無 - 2011/08/23(火) 19:31:03.05 (+3,-24,-3)
    windowsじゃバイナリが読めないからじゃね
    926 : デフォルトの名無 - 2011/08/23(火) 20:15:33.95 (-1,-29,-6)
    /dev/stdin指定しときゃよくね?
    927 : デフォルトの名無 - 2011/08/23(火) 20:54:54.54 (-1,-29,-7)
    objdump -d /dev/stdin < foo
    言われてみると確かにそうだが
    よく気づいたな
    928 : デフォルトの名無 - 2011/08/23(火) 21:43:56.60 (+4,-30,-18)
    objdump -d /dev/stdin <a.out だと動いたけど
    cat a.out | objdump -d /dev/stdin だとだめだ
    929 : デフォルトの名無 - 2011/08/23(火) 21:50:55.06 (+31,-30,-43)
    どうしてもパイプ使いたくて特定のシェル(例:bash)なら↓でどうだろうか?
    objdump -d <(cat a.out)
    930 : デフォルトの名無 - 2011/08/24(水) 06:21:55.36 (+43,-29,-80)
    >>920
    ありがとう、でも/usr/include/mach-o以下が足りてなくてビルドできない……。
    OSのバージョンが違うんだからそうかもしれないけど。

    わかったのは、snow leopard以降libunwindというのを使うようになっていること。
    恐らく例外情報をもっとうまく扱えるようになって、ldはラベルを頼りにしなくて良くなった。
    で、ここからは想像だけど、きっとldがラベルを必要としない→じゃあgccもラベル吐かなくていいんじゃね?って流れがあった。
    Leopardは切り捨てられたんだ……orz
    931 : デフォルトの名無 - 2011/08/24(水) 11:38:12.44 (+4,-29,-44)
    >>930
    余計なお世話かもしれませんが、Snow Leopard以降のOSを使った方が色々と楽だと思いますよ。
    PPCなMacをお使いならIntel Mac(Core 2 Duo以降)への移行もしたいところ(Lionへの移行も睨んで)。
    932 : デフォルトの名無 - 2011/08/24(水) 13:52:15.01 (+3,-30,-118)
    >>928
    objdumpはファイル記述子0(stdin)を
    そのまま使うということが出来ない実行ファイル。

    常にパスをopen(2)しないといけない。
    /dev/stdinはopend(2)でファイル記述子0を扱うための仕掛け。

    |を使うとopen(2)でなく、shellがpipe(2)でパイプを作成し、
    右辺コマンドのファイル記述子0としてから、objdumpを起動する。
    しかし、objdumpはファイル記述子0を扱えない。

    933 : デフォルトの名無 - 2011/08/24(水) 13:53:20.48 (+66,+29,-42)
    >>929
    結局はパイプなので駄目。単なる構文糖衣。
    ちなみに最初期のシェルはそういう文法(ただし括弧なし)だった。
    934 : デフォルトの名無 - 2011/08/24(水) 13:54:29.57 (+61,+27,-6)
    >>930
    その辺がOS独自拡張の怖いところだよね。
    935 : デフォルトの名無 - 2011/08/24(水) 15:06:13.38 (+13,-29,-43)
    >>933
    このbashの拡張は名前付きパイプを作るもので、/dev/stdinとは別物になるはずだから、それでもできないの?
    936 : デフォルトの名無 - 2011/08/24(水) 15:26:36.04 (+38,-30,-86)
    >>935
    named pipeになるかどうかは
    bashをmakeする時のconfigによる。
    必ずnamed pipeになるわけじゃない。

    その上、objdumpがregular fileかどうか調べてる。
    $ objdump -d <(cat /bin/ls)
    objdump: Warning: '/dev/fd/63' is not an ordinary file
    937 : デフォルトの名無 - 2011/08/24(水) 16:52:11.68 (+63,+29,-5)
    >>936
    あらら、ご丁寧にそんなチェックが入るのか、残念。
    938 : デフォルトの名無 - 2011/08/26(金) 12:57:43.92 (+21,+3,+0)
    復帰
    939 : デフォルトの名無 - 2011/08/27(土) 05:23:21.81 (+28,-3,-19)
    SSEでベクトル化しやすいような、配列の合計を求めるコードを教えてください。
    940 : デフォルトの名無 - 2011/08/27(土) 05:30:08.71 (+57,+29,-34)
    その質問しかたで答えられる人がいると思うの?
    941 : デフォルトの名無 - 2011/08/27(土) 09:37:40.02 (+52,+29,-14)
    本人なら答えられるはず
    942 : デフォルトの名無 - 2011/08/27(土) 19:26:19.07 (+52,+29,-2)
    自分で質問して自分で答えると。
    943 : デフォルトの名無 - 2011/08/27(土) 20:52:09.65 (+57,+29,-6)
    2ch では良くあること
    おまいらも見に覚えがあるだろ
    944 : デフォルトの名無 - 2011/08/28(日) 15:15:34.25 (-1,-29,-8)
    × 見に覚え(Google mozc)
    ○ 身に覚え(Anthy,Canna)
    945 : デフォルトの名無 - 2011/08/29(月) 11:14:01.91 (+1,-30,-11)
    >>939
    float32 sum=0;
    for(int i=0;i<N;i++) sum += array[i];
    946 : デフォルトの名無 - 2011/08/30(火) 18:29:50.24 (+57,-30,-132)
    gcc3 と gcc4 ってなにか変わったんですか?教えてください。

    gcc 3.4.4で、以下のC++ソースがコンパイルできていました。
    ----- hello.cpp -----------------------
    #include <iostream.h>
    int main() {
      cout << "Hello, world" << endl;
      return 0;
    }
    ----- hello.cpp -----------------------

    setup.exe を見ていると、gcc4 があることに気づき、
    gcc4 4.3.4 をインストールしたところ、下記のエラーでコンパイルできなくなりました。
    $ g++ hello.cpp
    hello.cpp:1:22: error: iostream.h: No such file or directory

    Cygwin を全部削除して、gcc3 を入れずに gcc4、gcc4-core、gcc4-g++をインストールしても、同じでした。
    gcc4 を使うにはなにか他に入れる必要があるのでしょうか?
    947 : デフォルトの名無 - 2011/08/30(火) 18:37:44.33 (+52,+29,-3)
    牧原あゆちゃんの画像もっとくれ
    948 : デフォルトの名無 - 2011/08/30(火) 18:49:50.34 (-1,-29,-35)
    エラーメッセージを読みなよ
     iostream.h: このようなファイル、またはディレクトリは見つかりません
    #include <iostream>にしな
    949 : デフォルトの名無 - 2011/08/30(火) 19:30:48.46 (+3,-30,-126)
    $ g++ hello.cpp
    hello.cpp: In function 'int main()':
    hello.cpp:5: error: 'cout' was not declared in this scope
    hello.cpp:5: error: 'endl' was not declared in this scope

    <iostream> にしてもエラーがでます。???わかんない
    950 : デフォルトの名無 - 2011/08/30(火) 19:35:33.18 (+34,-17,+1)
    std::
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / gcc スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - std:map + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について