私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
元スレGCCについて part9
gcc スレッド一覧へ / gcc とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 : ○
レスフィルター : (試験中)
-Ofastとかしたの?
LTOも試してみた?
関数に最適化を助けるattribute付けてみた?
LTOも試してみた?
関数に最適化を助けるattribute付けてみた?
>>902
-Ofast -march=native でやってみたけど、gcc 4.4 の吐くバイナリと速度は変わらなかったわ。
ソフトウエアに激しく依存するだろうから参考にもならないだろうけど、
ちょっと他の人の感想が聞きたかったんだよ。ごめんな。
-Ofast -march=native でやってみたけど、gcc 4.4 の吐くバイナリと速度は変わらなかったわ。
ソフトウエアに激しく依存するだろうから参考にもならないだろうけど、
ちょっと他の人の感想が聞きたかったんだよ。ごめんな。
COMのIDispatchを書くのがめんどくさいんで、タイプライブラリから生成したいんだけど、
そもそもGCCでタイプライブラリをどうやったら作れるのか解からん。
IDLに相当するようなもんってツールチェインにあるの?
そもそもGCCでタイプライブラリをどうやったら作れるのか解からん。
IDLに相当するようなもんってツールチェインにあるの?
米Intel、並列プログラミングのためのC/C++言語拡張「Cilk Plus」をオープンソース化。GCCへの実装も開始
http://sourceforge.jp/magazine/11/08/17/0515246
http://sourceforge.jp/magazine/11/08/17/0515246
gcc 4.6で、4.5まで作られてた例外テーブルの (関数名).eh ってラベルが作られなくなったせいか、
Macでのldの-dead_stripで.eh_frameセクションごと丸ごとstripされてしまって例外が受け取れなくなってないか?
ELFターゲットの--gc-sectionsのほうは大丈夫だった。
俺まだLeopardなんで買い換えろボケって話かもしれないんで、誰かLionで試してはくれまいか。
Macでのldの-dead_stripで.eh_frameセクションごと丸ごとstripされてしまって例外が受け取れなくなってないか?
ELFターゲットの--gc-sectionsのほうは大丈夫だった。
俺まだLeopardなんで買い換えろボケって話かもしれないんで、誰かLionで試してはくれまいか。
いやいや-dead_stripは-dead_strip。使われてないシンボルを削除するもので
動作自体はGNU ldの--gc-sectionsそのもの。
Appleのldだとオプションが違うのよ。
動作自体はGNU ldの--gc-sectionsそのもの。
Appleのldだとオプションが違うのよ。
だからstripじゃ無いんだよ。--gc-sectionsなんだよ。
効果は、どこからも参照されてないシンボルを「コードごと」実行ファイルから取り除くもので
stripにはこんな機能ないよ。Windows系のリンカで言うところのスマートリンクだよ。
効果は、どこからも参照されてないシンボルを「コードごと」実行ファイルから取り除くもので
stripにはこんな機能ないよ。Windows系のリンカで言うところのスマートリンクだよ。
ですです。
最初フロントエンドの問題かもと思ったけど、4.6.x全部でフロントエンド問わず発生するんで
gcc全般について話せるところのほうがいいだろうと。とくれば英語苦手なんでこっちに来た。
Simonさんに試してもらった範囲ではLionでは起きないってことで
今はldのバージョンとの組み合わせ問題かなあ?と思ってるところ。
条件がはっきりしたらgccのbugzillaに投げるから、誰か協力してくれない?
最初フロントエンドの問題かもと思ったけど、4.6.x全部でフロントエンド問わず発生するんで
gcc全般について話せるところのほうがいいだろうと。とくれば英語苦手なんでこっちに来た。
Simonさんに試してもらった範囲ではLionでは起きないってことで
今はldのバージョンとの組み合わせ問題かなあ?と思ってるところ。
条件がはっきりしたらgccのbugzillaに投げるから、誰か協力してくれない?
確認方法はこんな感じでいいですか?http://gist.github.com/1162352
一応ldに-dead_stripを渡してみたけど、間違ってたらゴメン。
ちゃんとした確認用ソースコードとコマンドラインがわかれば改めて試します。
一応ldに-dead_stripを渡してみたけど、間違ってたらゴメン。
ちゃんとした確認用ソースコードとコマンドラインがわかれば改めて試します。
あー、動いてますね……。
確認方法はそれでいいです。
やっぱ単にいつまでもLeopardにしがみついてないで買い換えろボケって話か……orz
確認方法はそれでいいです。
やっぱ単にいつまでもLeopardにしがみついてないで買い換えろボケって話か……orz
一応Leopardのldの何がまずいかを詳しく書いておくと、__eh_frameって例外情報のセクションが
「-dead_strip」使用、かつ「(関数名).ehってラベルを持っていないとき」限定で、リンクされない(実行ファイルから除かれてしまう)
gcc 4.5までは (関数名).eh ってラベルが生成されてたんだけど、4.6から生成されなくなった。
セクションの有無はsize -mか、GNU binutilsを入れているならobjdumpで確認可能、参考まで。
バグレポートするかどうか悩む……。
あとsage忘れに気付いたごめんなさい。
「-dead_strip」使用、かつ「(関数名).ehってラベルを持っていないとき」限定で、リンクされない(実行ファイルから除かれてしまう)
gcc 4.5までは (関数名).eh ってラベルが生成されてたんだけど、4.6から生成されなくなった。
セクションの有無はsize -mか、GNU binutilsを入れているならobjdumpで確認可能、参考まで。
バグレポートするかどうか悩む……。
あとsage忘れに気付いたごめんなさい。
>>919
Appleのldはソースが公開されているので、ひとまずそれを手元の環境でコンパイルして試すというのはどうでしょう?
http://www.opensource.apple.com/source/ld64/ld64-123.2.1/
ChangeLogを読むと修正内容に-dead_stripやdead strippedなどと書かれてますね(内容は確認してないです)。
Appleのldはソースが公開されているので、ひとまずそれを手元の環境でコンパイルして試すというのはどうでしょう?
http://www.opensource.apple.com/source/ld64/ld64-123.2.1/
ChangeLogを読むと修正内容に-dead_stripやdead strippedなどと書かれてますね(内容は確認してないです)。
objdumpは標準入力からデータを受けとるようなことは出来ますか?
見た感じファイルから読み込まなければならないような作りに見えますが
見た感じファイルから読み込まなければならないような作りに見えますが
それ,objdumpがobjfileを指定されていないときにデフォルトでa.outを読むから
本当だ
ソース見る限り方法はなさそう
if (optind == argc)
display_file ("a.out", target);
else
for (; optind < argc;)
display_file (argv[optind++], target);
ソース見る限り方法はなさそう
if (optind == argc)
display_file ("a.out", target);
else
for (; optind < argc;)
display_file (argv[optind++], target);
objdump -d /dev/stdin < foo
言われてみると確かにそうだが
よく気づいたな
言われてみると確かにそうだが
よく気づいたな
objdump -d /dev/stdin <a.out だと動いたけど
cat a.out | objdump -d /dev/stdin だとだめだ
cat a.out | objdump -d /dev/stdin だとだめだ
どうしてもパイプ使いたくて特定のシェル(例:bash)なら↓でどうだろうか?
objdump -d <(cat a.out)
objdump -d <(cat a.out)
>>920
ありがとう、でも/usr/include/mach-o以下が足りてなくてビルドできない……。
OSのバージョンが違うんだからそうかもしれないけど。
わかったのは、snow leopard以降libunwindというのを使うようになっていること。
恐らく例外情報をもっとうまく扱えるようになって、ldはラベルを頼りにしなくて良くなった。
で、ここからは想像だけど、きっとldがラベルを必要としない→じゃあgccもラベル吐かなくていいんじゃね?って流れがあった。
Leopardは切り捨てられたんだ……orz
ありがとう、でも/usr/include/mach-o以下が足りてなくてビルドできない……。
OSのバージョンが違うんだからそうかもしれないけど。
わかったのは、snow leopard以降libunwindというのを使うようになっていること。
恐らく例外情報をもっとうまく扱えるようになって、ldはラベルを頼りにしなくて良くなった。
で、ここからは想像だけど、きっとldがラベルを必要としない→じゃあgccもラベル吐かなくていいんじゃね?って流れがあった。
Leopardは切り捨てられたんだ……orz
>>930
余計なお世話かもしれませんが、Snow Leopard以降のOSを使った方が色々と楽だと思いますよ。
PPCなMacをお使いならIntel Mac(Core 2 Duo以降)への移行もしたいところ(Lionへの移行も睨んで)。
余計なお世話かもしれませんが、Snow Leopard以降のOSを使った方が色々と楽だと思いますよ。
PPCなMacをお使いならIntel Mac(Core 2 Duo以降)への移行もしたいところ(Lionへの移行も睨んで)。
>>928
objdumpはファイル記述子0(stdin)を
そのまま使うということが出来ない実行ファイル。
常にパスをopen(2)しないといけない。
/dev/stdinはopend(2)でファイル記述子0を扱うための仕掛け。
|を使うとopen(2)でなく、shellがpipe(2)でパイプを作成し、
右辺コマンドのファイル記述子0としてから、objdumpを起動する。
しかし、objdumpはファイル記述子0を扱えない。
objdumpはファイル記述子0(stdin)を
そのまま使うということが出来ない実行ファイル。
常にパスをopen(2)しないといけない。
/dev/stdinはopend(2)でファイル記述子0を扱うための仕掛け。
|を使うとopen(2)でなく、shellがpipe(2)でパイプを作成し、
右辺コマンドのファイル記述子0としてから、objdumpを起動する。
しかし、objdumpはファイル記述子0を扱えない。
>>930
その辺がOS独自拡張の怖いところだよね。
その辺がOS独自拡張の怖いところだよね。
>>933
このbashの拡張は名前付きパイプを作るもので、/dev/stdinとは別物になるはずだから、それでもできないの?
このbashの拡張は名前付きパイプを作るもので、/dev/stdinとは別物になるはずだから、それでもできないの?
>>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
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
>>936
あらら、ご丁寧にそんなチェックが入るのか、残念。
あらら、ご丁寧にそんなチェックが入るのか、残念。
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 を使うにはなにか他に入れる必要があるのでしょうか?
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 を使うにはなにか他に入れる必要があるのでしょうか?
エラーメッセージを読みなよ
iostream.h: このようなファイル、またはディレクトリは見つかりません
#include <iostream>にしな
iostream.h: このようなファイル、またはディレクトリは見つかりません
#include <iostream>にしな
$ 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> にしてもエラーがでます。???わかんない
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> にしてもエラーがでます。???わかんない
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / gcc スレッド一覧へ
みんなの評価 : ○類似してるかもしれないスレッド
- 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
トップメニューへ / →のくす牧場書庫について