元スレGCCについて part9
gcc覧 / PC版 /みんなの評価 : ○
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::
みんなの評価 : ○
類似してるかもしれないスレッド
- GCCについて part8 (763) - [95%] - 2009/3/11 8:47 ☆
- GCCについて part10 (538) - [90%] - 2018/7/5 20:30
- 【激遅】AppleGCC【絶望】 (111) - [18446744073709551607%] - 2010/1/15 10:31
トップメニューへ / →のくす牧場書庫について