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

    元スレGCCについて part9

    gcc覧 / PC版 /
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - std:map + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter

    901 = :

    >>900
    誰か試してる奴が居たら、聞きたいじゃん。
    うちではあまり効果無かった…。

    902 = :

    -Ofastとかしたの?
    LTOも試してみた?
    関数に最適化を助けるattribute付けてみた?

    904 = :

    >>902
    -Ofast -march=native でやってみたけど、gcc 4.4 の吐くバイナリと速度は変わらなかったわ。
    ソフトウエアに激しく依存するだろうから参考にもならないだろうけど、
    ちょっと他の人の感想が聞きたかったんだよ。ごめんな。

    905 = :

    COMのIDispatchを書くのがめんどくさいんで、タイプライブラリから生成したいんだけど、
    そもそもGCCでタイプライブラリをどうやったら作れるのか解からん。
    IDLに相当するようなもんってツールチェインにあるの?

    907 = :

    どうせ並列CPU持ってないと意味無いんだろ。

    908 = :

    gcc 4.6で、4.5まで作られてた例外テーブルの (関数名).eh ってラベルが作られなくなったせいか、
    Macでのldの-dead_stripで.eh_frameセクションごと丸ごとstripされてしまって例外が受け取れなくなってないか?
    ELFターゲットの--gc-sectionsのほうは大丈夫だった。

    俺まだLeopardなんで買い換えろボケって話かもしれないんで、誰かLionで試してはくれまいか。

    910 = :

    いやいや-dead_stripは-dead_strip。使われてないシンボルを削除するもので
    動作自体はGNU ldの--gc-sectionsそのもの。
    Appleのldだとオプションが違うのよ。

    912 = :

    だからstripじゃ無いんだよ。--gc-sectionsなんだよ。
    効果は、どこからも参照されてないシンボルを「コードごと」実行ファイルから取り除くもので
    stripにはこんな機能ないよ。Windows系のリンカで言うところのスマートリンクだよ。

    913 = :

    これは君かい?
    http://www.rhinocerus.net/forum/lang-ada/683219-dead_strip-exception-handling.html

    914 = :

    ですです。
    最初フロントエンドの問題かもと思ったけど、4.6.x全部でフロントエンド問わず発生するんで
    gcc全般について話せるところのほうがいいだろうと。とくれば英語苦手なんでこっちに来た。

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

    条件がはっきりしたらgccのbugzillaに投げるから、誰か協力してくれない?

    917 = :

    確認方法はこんな感じでいいですか?http://gist.github.com/1162352
    一応ldに-dead_stripを渡してみたけど、間違ってたらゴメン。
    ちゃんとした確認用ソースコードとコマンドラインがわかれば改めて試します。

    918 = :

    あー、動いてますね……。
    確認方法はそれでいいです。

    やっぱ単にいつまでもLeopardにしがみついてないで買い換えろボケって話か……orz

    919 = :

    一応Leopardのldの何がまずいかを詳しく書いておくと、__eh_frameって例外情報のセクションが
    「-dead_strip」使用、かつ「(関数名).ehってラベルを持っていないとき」限定で、リンクされない(実行ファイルから除かれてしまう)
    gcc 4.5までは (関数名).eh ってラベルが生成されてたんだけど、4.6から生成されなくなった。

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

    バグレポートするかどうか悩む……。
    あとsage忘れに気付いたごめんなさい。

    920 = :

    >>919
    Appleのldはソースが公開されているので、ひとまずそれを手元の環境でコンパイルして試すというのはどうでしょう?
    http://www.opensource.apple.com/source/ld64/ld64-123.2.1/
    ChangeLogを読むと修正内容に-dead_stripやdead strippedなどと書かれてますね(内容は確認してないです)。

    921 = :

    objdumpは標準入力からデータを受けとるようなことは出来ますか?
    見た感じファイルから読み込まなければならないような作りに見えますが

    924 = :

    本当だ
    ソース見る限り方法はなさそう

    if (optind == argc)
    display_file ("a.out", target);
    else
    for (; optind < argc;)
    display_file (argv[optind++], target);

    925 = :

    windowsじゃバイナリが読めないからじゃね

    928 = :

    objdump -d /dev/stdin <a.out だと動いたけど
    cat a.out | objdump -d /dev/stdin だとだめだ

    929 = :

    どうしてもパイプ使いたくて特定のシェル(例:bash)なら↓でどうだろうか?
    objdump -d <(cat a.out)

    930 = :

    >>920
    ありがとう、でも/usr/include/mach-o以下が足りてなくてビルドできない……。
    OSのバージョンが違うんだからそうかもしれないけど。

    わかったのは、snow leopard以降libunwindというのを使うようになっていること。
    恐らく例外情報をもっとうまく扱えるようになって、ldはラベルを頼りにしなくて良くなった。
    で、ここからは想像だけど、きっとldがラベルを必要としない→じゃあgccもラベル吐かなくていいんじゃね?って流れがあった。
    Leopardは切り捨てられたんだ……orz

    931 = :

    >>930
    余計なお世話かもしれませんが、Snow Leopard以降のOSを使った方が色々と楽だと思いますよ。
    PPCなMacをお使いならIntel Mac(Core 2 Duo以降)への移行もしたいところ(Lionへの移行も睨んで)。

    932 = :

    >>928
    objdumpはファイル記述子0(stdin)を
    そのまま使うということが出来ない実行ファイル。

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

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

    933 = :

    >>929
    結局はパイプなので駄目。単なる構文糖衣。
    ちなみに最初期のシェルはそういう文法(ただし括弧なし)だった。

    934 = :

    >>930
    その辺がOS独自拡張の怖いところだよね。

    935 = :

    >>933
    このbashの拡張は名前付きパイプを作るもので、/dev/stdinとは別物になるはずだから、それでもできないの?

    936 = :

    >>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 = :

    >>936
    あらら、ご丁寧にそんなチェックが入るのか、残念。

    938 = :

    復帰

    939 = :

    SSEでベクトル化しやすいような、配列の合計を求めるコードを教えてください。

    940 = :

    その質問しかたで答えられる人がいると思うの?

    941 = :

    本人なら答えられるはず

    942 = :

    自分で質問して自分で答えると。

    943 = :

    2ch では良くあること
    おまいらも見に覚えがあるだろ

    945 = :

    >>939
    float32 sum=0;
    for(int i=0;i<N;i++) sum += array[i];

    946 = :

    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 = :

    牧原あゆちゃんの画像もっとくれ

    949 = :

    $ 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 = :

    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 + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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