1 :
デフォルトの名無しさん :
2009/06/27(土) 08:34:50
おつ
/| //|| || /( (・゚)) . |:| // . | | | | | | | |. | .|| | | / | , _____ .|| | | / | / ____ / .|| | | /. | / / / / |:| | || | -‐-| / / / / | | | ||\ / / / / | |____/ .| | :| \ \/ | / / \.______/ | | \ ゝノ / | | /) / . .|| / / | | (_/ \ / /⌒\ \ (___/ \__)
._ \ 、・、 ., . . .`、 、`・、 . ., . \ .`・x、 ., .‐ヤTTTTTTTTTTTTTT_ニ‐! . .\ 、`ー、_ . . .i _.‐“゜ \ 、`・、 } _.‐“´ ヘ_ . . . ./ . .i . 、、・゛ ._.^ . . . ._.″ . 、} . . . ._.^ 、 ゙_.・´ . . . ._.・′ 、i . ノ゜ ゙’ . ._.・^ . . ._、‐?´ . . .′ ゙/` 、1 . . ..ヤ´ . 、・^` .(_ , . . .`¨“〜-=.、_ ._. . `¨“?〜---・^`
7 :
デフォルトの名無しさん :2009/06/29(月) 13:17:44
空気読まずに質問です。 ググってみたが解決策が見つからないです。ヒントをください。 const short x_limit_min[8] = {i, i-1, i-2, i-3, i-4, i-5, i-6, i-7}; __asm__ volatile ( : " movdqu %[x_limit_min], %%xmm3 ¥n¥t" : :: ..., [x_limit_min] "m" (x_limit_min), ... : ... ); こう書いてみたところ、(Xは数字) error: memory input X is not directly addressable と警告されてしまう。 ローカル配列のアドレスを渡すだけなので :: [x_limit_min] "m" (&x_limit_min) としてみても、同じエラーだった。どうするのが正解でしょう?
>>7 x_limit_minのポインタをレジスタに入れて間接アドレッシングで書いてみたら?
9 :
デフォルトの名無しさん :2009/06/30(火) 04:44:30
Mac OS Xのgccってgccのホームページからソースをダウンロードしてコンパイルして 置き換えてしまっても大丈夫なのでしょうか?
age質問でマカー。 おまけにスレ違い。最悪だよな。
スルーできないのがドザ
>>9 マジレスすると、No。
MacOS Xについているgccは、Apple Extensionがいくつか
入っている。だから、置き換えるんじゃなくて別のパスに
バイナリを置いて、環境変数CCとかにフルパスを埋め込んで
きりかえる。例えば、/opt/local/bin/とか/usr/local/bin/とか。
Xcodeがデフォルトでgcc4.0.1と4.2.1、llvm-gccを入れるけど、
MacPortからすっぴんgccをバージョン指定で落としてきて入れるっ
てのが可能らしい。試したことは無いけど。
マカーウゼー
14 :
7 :2009/06/30(火) 20:32:48
>13 まあまあ。Appleのllvmとかclangへの貢献度は高いと思うし。 >8 解決しました。vectorを使ってあげればそのまま行けました。こんな感じです。 v8hi x_limit_min = {i, i-1, i-2, i-3, i-4, i-5, i-6, i-7};
>>9 >>12 が言ってるが、フレームワークをリンクしたりするなら止めたほうがいい。
binutils相当がかなり違うし、GCC自体も独自拡張の部分が多いから。
gccのmanページで"APPLE ONLY"を検索してみると違いがよく分かる。
ドザよりよっぽどgccに近いところにいると思うんだ。 mac使ったことないけど。
それは無い。 次の無かったNeXTならともかくw 結局、Solarisに成る前のSUNが一番良かったな。
AppleがFSFに協賛してるなんて初耳だ。 Mac OSってGPLなの? コンパイラ作る技術が無いから利用してるだけでしょ。
19 :
7 :2009/07/01(水) 05:39:33
>>19 いや、結構オープンソース嫌いなイメージがあるのだが。
当てつけのように暗号化したりして邪魔してるじゃん。
22 :
7 :2009/07/01(水) 08:29:40
>>20 「当てつけのように暗号化」の話は はつみみです。
そーすよろ。
OS Xはしばらくの間ソース公開してたよな。
>>19 自分とこでも動くようにパッチ投げてるだけで、最初のソース本体を
GPLで公開してない。それどころか自社独自ハードのデバドラは
ソース非公開だし。そこに挙がってるような上っ面のソフトなんて、
別にソース公開してくれなくても、見た目が似たようなのは幾らでも
作れる。必要なのはハードウェアのデバドラをOSS化すること。
そもそもOS X 自体を再コンパイル出来ないし。
>>21 GCCは利用するが、貢献はしてない。むしろあからさまにGPLを
成果物から避けてる。Takeはするけど、Giveはしない。
>>22 voidウザい。
Apple Public Source Licenseとか、CDDLなSunやMS-PLなMicrosoftと同じ穴の狢。
>>24 がうわっつらだけしか見てない奴ということはよくわかった。
最近のアップルの独自ハードなんてiPhone/iPodTouchのARM SoCくらいで後は汎用部品ばかりじゃないか
見てないではなく、
>>24 は「何も知らない」が適当だな
GCCへの貢献が無いだとか、嘘もいいところだ
上に貼られているリンクみればDarwinのコード落とせるのにね。
カーネル部分だけでなくお望みの各種デバイスドライバのソースも 置いてあるのにな
米IBMらがオープンソースマシン学習コンパイラを発表――開発時間を短縮
http://sourceforge.jp/magazine/09/07/01/0714255 >GCCをインタラクティブなマシン学習対応研究ツールに変換する「Milepost Framework」を利用、それぞれの設定に応じてコンパイラを開発することなく、自動的に最適化するコンパイラを生成する。
>ターゲットアーキテクチャ向けにアプリケーションを迅速にチューニングするため、再設定して構築するシステムの開発期間を短縮できるという。
>「IBM System p」で行った組み込みアプリケーションのベンチマークテストでは、性能が平均18%改善されたという。
まーたこの人誤訳してそうだなぁ…。
「機械学習」で成語だよなぁ
>>24 >Takeはするけど、Giveはしない。
Give を強要するのがオープンソースじゃないでしょ。
それに、Apple 由来のソースコードは沢山見掛けるよ。
俺は意識的に GPL 物を避けてるけど、ライセンスの選択は
プログラマの自由だから他人にとやかく言われたくないし。
マカーってDarwinを免罪符にしてるけど、DarwinはMac OS Xじゃないんだけどね。 貢献しているっていうなら、Darwinじゃなく、Mac OS XをGPLで配布すればいいじゃん。 MSもアップルもSUNも同じ穴の狢で、ただの独占を狙ってる企業って事実を認識しろよ。
クレクレ君乙。 穴の見分けもつかない奴が同じ穴の狢とか言ってんなよw CDDL は『GPL がコンフリクトを起こしている』だけで、 オープンソースライセンスとしては何の問題も無いぞ。 現に BSDL な環境に持って行っても問題は出ていないし。
どこまで馬鹿なんだ? 「GCCに貢献してない」と言い出したのはテメーだろうが それを論破されたからと言って無関係な事を言い出すなよ、気違いが
>>34 もういいです。Appleとまかが死ぬほど嫌いなのは良くわかりました。
お願いですからトリップつけてください。あぼーんするから。
その昔、MS相手にAppleがルックアンドフィールで訴訟を仕掛けたことを理由に RMSがAppleをdisって以来の筋金入りのRMS信者かなw
>>34 禿同!
>>36 違う違う。それ俺。
とにかくマカーが狂ってるのは分かったから
>>37 は
トリップ付けろ。アボーンするから。<言い出しっぺの法則
分裂したw
貢献してねーじゃん(w 論破とか言って勝利宣言かよ。 マカー的には「アップルはgccに多大な貢献しているから多少のスレチは 我慢しろボケ」ってことかよ。意味わかんねー。
そういえば昔 NeXT を寄贈してたのってキヤノンだっけ? NeXT 社?
>>41 糞レスしてる暇あったらGCCのChangeLog見てみろよ
ソースも無しに貢献してないしてないとわめくなクソガキが
>43 そのとおりですね。 パッチポストしてる人のメールアドレス見てみれば >41とか>39とかがおばかさんなのは良くわかります。 きっと39とか41とかはchangelogもMLも見たことさえ ないのでしょう。
じゃあ、gccに多大な貢献をしているApple関係のすれ違いは容認ってことで。 今からAppleスレね。 gccの話もしてもいいよ。
gccとか書いてる時点で馬鹿確定だな
自己紹介は良いから(w
次のようなプログラムをgcc(3.3.5, 4.4.0)でコンパイルするとハネられます。 PGIやwindows SDKのコンパイラなら問題なく通るのだけど、なにか間違ってる? T::size_type is parsed as a non-typeとか言ってくるし。 でも、 void func(const T&) [with T=std::vector<double, std::allocator;double> >]と、Tがvector型だとわかってインスタンス化してるんですがねぇ。 当然、vector<double>::size_typeは存在するのでテンプレートとして書かなければgccでも通ります。 バグ? #include <iostream> #include <vector> using namespace std; template <class T> inline void func(const T& a) { T::size_type length = a.size(); cout << length << endl; } int main(int argc, int argv) { vector<double> a(5); func(a); return 0; }
T::size_typeが一見して型名だとは解らないため (enum定数とかstatic変数かも) typename T::size_type としてみれ
さんくす lengthの定義のところにtypenameを入れたら通りました。 C++って元からそんな仕様だったっけ? まあ通ったからいいや。
そういう仕様です。
環境→OS:Fedora11 gccのバージョン:gcc 4.4.0
GEANT4というシュミレーションコードのコンパイルがうまくいかず、困っています。
3ヶ所ほどコンパイル中にエラーが出ていて、2つは潰したのですが…
最後に残った
Compiling G4ScoreLogColorMap.cc ...
src/G4ScoreLogColorMap.cc: In member function 'virtual void G4ScoreLogColorMap::DrawColorChartText(G4int)':
src/G4ScoreLogColorMap.cc:157: error: 'sprintf' is not a member of 'std'
gmake[2]: *** [/home/xxxxxxxxxxxxx/geant4/tmp/Linux-g++/G4detutils/G4ScoreLogColorMap.o] エラー 1
というエラーが取り除けなくて困っています。
読み込んでいるヘッダーがおかしいんだろうなぁとは思うのですが…
ネットで調べて、色々読み込んでみました。
(1)
ttp://www.drk7.jp/MT/archives/001498.html ここを参考に…(ここはatoiが読み込めませんと出ていた。)
#include <cstdlib>
#include <cstring>
(2)
ttp://code.google.com/p/pyminuit/issues/detail?id=8 を参考にして…
#include <algorithm>
(3)
ttp://simd.jugem.jp/?eid=73 を参考にして、また、c++がcを下位互換でサポートしている事を踏まえて
#include <stdio.h>
これだけ加えてみましたが、同じエラーが続いています。
どのヘッダーに含まれているのか、ご存知の方いらっしゃいましたら、ご教示いただけませんか?
宜しくお願いいたします。
<cstdio>
56 :
54 :2009/07/03(金) 23:47:06
>>55 本当にありがとうございます!解決しました!
標準のINCLUDE PATHは変えられないのですか? 自分のHOMEにライブラリをインストールしたのですが、コンパイル時には システムに標準で入っている古いライブラリのヘッダを観に行ってしまって 失敗するようです。 /usr/localを見ないようにはできませんか?
普通に見ない
-isystem
gccのオプションで -mtune と -march の違いって何ですか?
man gcc
ありがとう ググって解決しました
4.4.1
gcc 4.4を使うとGPL強制されるので使っちゃダメです
夏だなぁ
gccがパブリックドメインになるのは50年後です
69 :
68 :2009/08/01(土) 19:52:06
間違えた、著者の死後50年だよね。
著作権についてロクに知らない馬鹿だな。 保護期間が50年なのは財産権であって、人格権は含まれない。 パブリックドメインは人格権に相当するものも含めパブリックと解される。
人格権は日本では相続不可。保護期間は死後0年まで。
116条
影響しないはずの e_X のコメントの有無で結果が変わ る。誰か報告してくれ。 #include <stdio.h> // gcc version 4.2.1 20070719 [FreeBSD] // gcc version 4.1.2 20071124 (Red Hat 4.1.2-42) typedef enum { // e_X = -1, e_a, } enum_t; void foo(enum_t e) { printf("e %s\n", e < 0 ? "< 0" : ">= 0"); } int main() { enum_t e = -1; foo(e); return 0; }
> Each enumerated type shall be compatible with char, a signed integer type, or an > unsigned integer type. The choice of type is implementation-defined,108) but shall be > capable of representing the values of all the members of the enumeration. 意訳) enum の型は処理系定義だよ、ただしメンバの値はすべて表現できなければならない なので、メンバに負の値がなければ、処理系によっては unsigned を選ぶかもしれない unsigned になった場合は e = -1 は e = (unsigned) -1 のことだから、 なんというか、まぁ、仕方ないんじゃないか
e_Xがないとeが負とならないと判断して printf("e %s\n", e < 0 ? "< 0" : ">= 0"); が printf("e %s\n", ">= 0"); に最適化されてるみたい。
>>74 マジか…int とコンパチだと思ってたよ。
いやでも同一の implementation で揺れるのはどうなの?(w
コードとかの問題じゃないけど、わかる人いたら回答おね。 GCC4.4を--prefix=/opt --program-suffix=-4.4のOPTで自己ビルドインスコ。 これでいくとlibstdc++.so.6とlibgcc_s.so.1が/opt/lib64ディレクトリにできるんだけど、 問題はコンパイルしたアプリがこれらを参照しないでUbnuntu9.04のGCC4.3とセット物の/usr/lib配下の 物を参照してる。アプリをコンパイル時にLD_RUN_RATHに/opt/lib64をつけても変わらない。 ちなみに/opt/lib64/libstdc++.so.6は/opt/lib64/libstdc++.so.6.0.12へ、/usr/lib/libstdc++.so.6は /usr/lib/libstdc++.so.6.10へのリンクだからバージョン違ってる・・ /etc/ld.so.confに/opt/lib64を追記すると両方共それを参照するけど、そうなるとシステム全部のアプリが (Ubuntuのgcc4.3でコンパイルされてる)全部gcc4.4のを読んでしまう(lddコマンドの結果)。 そうなるとよくないですよね。なのでやめました。 実行アプリ毎にLD_LIBRARY_PATHをつける管理が面倒なのでGCC4.4でコンパイルしたアプリも現状の GCC4.3のlibstdc++とlibgcc_sを読ませておく状態で使用して何か後々問題出る可能性ありますか?
>>78 リンク時に
-Wl,-rpath,/opt/lib64
とかいう話かね?
>>78 LD_RUN_RATH→LD_RUN_PATH
>>77 揺れていいみたいだね。
99)An implementation may delay the choice of which integer
type until all enumeration constants have been seen.
>>80 お、や。もしかしてそれをコンパイル時にコンパイラフラグで渡せばいいのでしょうか。
やってみます^^
>>81 すまそ、タイプミスです。
>>78 > /etc/ld.so.confに/opt/lib64を追記すると両方共それを参照するけど、そうなるとシステム全部のアプリが
> (Ubuntuのgcc4.3でコンパイルされてる)全部gcc4.4のを読んでしまう(lddコマンドの結果)。
それほんと?埋め込まれたバージョン番号が違うから、そのへん良きに計らってくれると思ったんだけど。
>>78 そういうもんだ。Ubuntuのg++-4.2も4.3のlibstdc++使ってるし、PPAにある
g++-4.4を入れるとlibstdc++も4.4にアップグレードされる。
まーlibstdc++のマイナーバージョン違いは気にしなくていいんじゃね?
87 :
デフォルトの名無しさん :2009/08/27(木) 18:58:19
-fopenmpだっけ? あれをつけるのとつけないとで違いってでる?
pragma omp云々 してないソースだと無意味。
gcc4.4ってGPL3だから Windows以外で採用不可能なんだね
は?
ひ?
ふぅ…
=3
うほっ
95 :
デフォルトの名無しさん :2009/09/10(木) 22:31:17
gcc 4.4.3 releaseの情報をギボンヌ
gcc-4.4でコンパイルしたオブジェクトとgcc-4.2でコンパイルしたオブジェクトを リンクするって出来るものなの?
できる
libstdc++の微妙な違いにはまったりして。 まあMajorが同じなら大丈夫か。
>>97 ありがとうございます。やってみたら出来ました。
100 :
デフォルトの名無しさん :2009/09/12(土) 08:47:46
別のプラットフォームのプログラムを開発することはできますか?
GCC クロスコンパイル でぐぐれ
使ってるレンタル鯖が C/C++ で書いた CGI を使えるって書いてあるんだけど、 シェルは解放してないからクロスコンパイル環境を作って対応したことはある。 (鯖は無料だからその程度の手間は仕方ないんだが。) 最近の GCC ならそんなに難しいことではない。 でも、ライブラリ類はコンパイル済みのをどこかからもってきた方がいいぞ。
g++ には VC のプリコンパイル済ヘッダみたいな機能はないんですかいの? boost 使ったソースをコンパイルしようとしたら遅すぎてやっとれんです。
gccにもpchぐらいあるわい
あ、ごめん、boostは知らんです… ccacheで我慢するくらいしか思いつきません
106 :
103 :2009/09/13(日) 00:38:06
おお、あるのね。どもっす。 とりあえずあとはぐぐってみます。
107 :
デフォルトの名無しさん :2009/09/26(土) 23:08:03
すみません質問なのですが,最近vc++からgccに乗り換えたのですが vc++にある wmain( int argc, wchar_t *argv[ ]) みたいに引数をwchar_tにすることはできるでしょうか?
エントリポイントwmainは非標準なので、gccにはない main関数内でargvをワイド文字列の配列に変換してwmainに渡すという手が有る
ありがとうございます,それでやってみます.
質問です。 コンパイルオプションとして-Werrorをつけたいのですが、 実装上どうしても、取り除くことができない警告があります。 この警告だけはWerrorの対象からはずすということができますでしょうか? もしできるならその方法を教えてください。
gccのソースをいじる
>>110 外したい警告がどういう警告なのか書けよ。
114 :
110 :2009/10/01(木) 23:00:07
>>111-113 返答ありがとうございます。
Werrorの非対象にしたいのは-Wをつけた際に出力される、longjmp関連の警告です。
-Wは複数の機能を持つオプションなので、-W自体を無効化はできない状況です。
-Wno-error=uninitializedとかでも良いかもな
117 :
110 :2009/10/01(木) 23:34:35
-fltoが入る前に-combine試してみたけど、 4.4だと引数が多すぎって言われてコンパイル出来ない事があるな 4.5になると引数の最大値が大きくなったりするんだろうか… というかしてくれないと困る。 -combine -fwhole-program -ftoでビルドしたいんじゃー
4.4.2
>>118 > 4.4だと引数が多すぎって言われてコンパイル出来ない事があるな
これってどういうメッセージ?
あーもうconstructors_destructor_fn_imps.hpで一晩潰しちゃったよ><あほか
>>120 cc1: error: too many filenames given. Type cc1 --help for usage
binutils 2.20
HelloWorldを、gcc・g++を使用してWinXP・Ubuntuでコンパイルしてみた。 ---------------------------- #include <stdio.h> int main(int argc, char** argv) { printf("HelloWorld!"); return (0); } ----------------------------- WinXPは正常に実行できたけど、Ubuntuのgccがうまくいかない。 /tmp/ccaeafnN.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0' collect2: ld はステータス 1 で終了しました バージョンは4.3.3。 上記のようにリンクでエラーがでる。 コンパイラはもともと入ってたやつだから、導入に失敗したわけではなさそうだけど。 オプションも出力先以外は指定してないし。 原因が分かるエスパーな方はいませんか?
#include <stdio.h> を #include <cstdio> に printf を std::printf に替えてみたらどうなる?
>>124 g++標準のライブラリがリンクされてないように見える。
g++ hello.cc ではなく gcc hello.cc でコンパイルしてない?
この手の「普通にやったらエラーが出るはずが無い」のに
gccを使っていてリンクエラーが出る場合、大抵は
>>126 だよな。
普通にg++とするか、あるいは-lstdc++とかでもなんとかなるもんだけど
意外にそこでひっかかる人も多いよね。
まあ
>>124 の原因は知らないけど。
128 :
124 :2009/10/18(日) 18:44:08
拡張子を.cにしたらいけました。 ありがとう。 それにしてもアホすぎる……。 TDM/Mingwだと「gcc hello.cpp」は通るけど「g++ hello.cpp」がリンクエラー。 \(^o^)/
129 :
デフォルトの名無しさん :2009/10/18(日) 19:27:04
-lstdc++ か?
gccの#defineマクロの記述で 通常の関数のreturnに相当する記述ってどうやって書けばいいのでしょうか?
それがわからないようならマクロなぞ使うな。あぶなっかしすぎる。
>>131 まさか知らないのですか?
バカなんですか?
gccの話題じゃないな
>>128 要するに、GCCでは拡張子で動作が変わるってことか。
C Compilerでなくて Compiler Collectionだからね。 拡張子を識別して使う言語を選択する。
拡張子で言語は選んでくれるのにライブラリは選んでくれないという気 の利かなさ。
extern "C" { とかあるしね。言語と実行環境を分けているんだと思う。
だってオブジェクトはどちらも.oで、そこからリンクする時に 必要に成るライブラリがどちらかなんて ld には分からない。 増改築を繰り返した田舎の温泉旅館みたいなc++は捨てて、 ISO C(c99)でええやん。
c99のほうが田舎の温泉旅館みたいなんだが……
C99って使ってる現場あるのか。
全機能ばりばり使ってます、という所は少ないと思うが、 //コメントとか、変数定義の混在とかは割と使ってるんじゃないか?
変数は最初に必要になった箇所で宣言するようにしたらかなり見易い。 変数はなるべく使い棄てにしたほうがコンパイラもフロー解析しやすいらしいし。
数値計算のパッケージ書いてるから、 <fenv.h>がないとどうしようもない。
使い捨てと言うか、スコープを狭くすると、フロー解析もやり易いし レジスタ割り付けも楽。最適化もやりやすく成る。
俺の周りではC99という言葉すら通じん…
レジスタは一括宣言のほうが楽なんじゃね? だってベースポインタ一緒なんだぜ?
Javaじゃねーんだから汎用レジスタに乗せて使い捨てることもあるだろ
いかにメモリアクセスを少なくするかが鍵みたいだよ。
>>149 そういう最適化はどこで宣言しようと同じだろ
変数を宣言する=メモリ上に領域を確保する 変数に代入する=メモリ上に書き込む こんな基本も分かってないようじゃ駄目だろ。 でも、キャッシュから追い出される前に破棄できるデータ領域は重要だよな。 1ms以下で終わる関数は終了までキャッシュメモリから追い出されない可能性あると思うし、 使い終わったらすぐ破棄すれば、その分多くグローバル/スタティックデータをキャッシュで保持できるようになる。 ところで、CPUロジック的には破棄したデータ領域の変更内容ってメインメモリに反映されるんだっけ? キャッシュが破棄されるのって内容が同一のときだけだろ? じゃあいくら破棄しても中身書き換えた以上はメインメモリに書き込むんじゃね? メインメモリへの書き込みを減らすには、できるだけ同じデータ領域を使いまわすのがいいんじゃないかな。 ヒープ領域とかなら繰り返し使われるよね。 でもJavaの場合で最小値が2MBだって。 優先的に実行されるアプリじゃない限り使い回しは難しいね。 確実に使いまわせるのはやっぱりスタック領域だよね。 直近の4kByteが必ず1次キャッシュに入る。 スタックに確保するには、引数渡ししたデータと普通に宣言した変数だよね。 少々のデータなら参照渡しするより値渡ししたほうがキャッシュ効率がいい事になる。 わけないか。 使った分だけ古いのがキャッシュから追い出されるんだ。 だから、ループで散らばったデータを使うくらいなら、ループだけを関数宣言してでもデータを一箇所に集めることが重要なのかな。 あ、そこで書き込みしないデータをループの直前でフォーカス作って変数宣言してコピーしたらいいわけだ。 結局おんなじか。 何度もスタックをキャッシュから追い出すくらいなら普通にヒープにまとめて領域取ったほうがいいな。 変更しなければ書き戻されはしないんだし。 結局小さいデータはオート変数ででっかいデータはアロケート・・ごく普通だな。
コンパイラの最適化舐めんなよ
gccの最適化は糞過ぎる ICCを少しは見習えつーんだよ
>>153 35年くらい前の知識で停まってるね。
register宣言が出てきた頃かな?
ごめんなさい。。。
ICCがgccより明かに優れているところなんてループ展開とかベクトル化とかだけだろ スタックをどういう風に使うかなんて部分では大差ないよ
記憶だと、gcc 4.4でiccの最適化を越えてる
それはないから
GCCをアーキテクチャ決め打ちのICCと比較しようとする時点で 頭の悪さが丸出しw
やるじゃんgcc
>>162 64Bitだと偉い差だ。そうえいばx264なんかもビルドしてバイナリ配ってる人なんか32Bitは
gcc3.4.6なんだけど64Bitはgcc4.4を使ってる。
ちょっとgcc4.4.2を落として来るわw ffmpeg自己ビルドなのでw
gcc4.4系統はバグもあるし ライセンス問題もあるから使わないほうがいいぞ
まあ! なんて素敵なFUDでしょう!!
とりあえずbinutilの2.20が10/16に新しいの出てたんでまず更新。 でgcc4.4.2を気合のシステム上書き(現状4.3.4)の--prefix=/usrインスコでコンパイルスタートして 5分くらい経ってやっぱダメだろって思ってCTL+C押して--prefix=/opt/gcc-4.3 --program-suffix=-4.3 にしたヘタレです・・・ 今コンパイル中、CPUフェノムなんで--with-tune-32=k8 --with-tune-64=amdfam10こんなのもつけてみました。
おおお、焦ったww --prefix=/opt/gcc-4.4 --program-suffix=-4.4ですねw 変なとこからコピペしたから4.3になってた。本当に4.3のままconfigしちゃったかと思って自分でビビったわ
>>164 グラフの目盛りよく見ろ。そのうえでえらい差って感じたんならいいけどさ。
>>169 ああああああああああああああああああああああああぁぁぁぁ
とか言いながら終わった、しかしグラフには騙された・・・ $ /opt/gcc-4.4/bin/gcc-4.4 -v Using built-in specs. Target: x86_64-linux-gnu コンフィグオプション: ../configure --prefix=/opt/gcc-4.4 --program-suffix=-4.4 --enable-shared --with-system-zlib --without-included-gettext --enable-threads=posix --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --with-gmp --with-tune-32=k8 --with-tune-64=amdfam10 --with-multilib-list=x86_64-linux-gnu,i386-linux-gnu --build=x86_64-linux-gnu --host=x86_64-linux-gnu スレッドモデル: posix gcc version 4.4.2 (GCC)
ゲーツェーツェーにはCPP CXX g++ などなど C/C++フンパイラだけいろいろあるけど 何がどう違うの。
CPP CXXはシェルの変数じゃなかろうか
cpp はプリプロセッサだろ。 常識的に考えて。 C++ のコンパイラやコンパイラドライバではない。 システムによってはコマンドに + の文字が使えないことがあるので、 便宜上用意されているのが cxx 。 たぶん、中身は一緒だと思う。
cc、cxx、c++辺りは、GCCでないシステム標準のコンパイラのことがある。 LinuxなどGCCを標準のコンパイラとして採用していると、GCCへのシンボリックリンクになっているけど。
AMDでgccに負けるほどiccってダメなのか
商用コードは品質が悪いから仕方ない
それ読んでgcc 4.4.3で試したけどその通りに最適化してくれないことがままあって困るw
パーパプー パーパプー パーパプーパーパプーパーパプー ピーロピーローリーローリロ ででーででーででー パスーン ピンポロピンポロピンポロピロピロプー 未だに自作のプログラムでダウボーイを作ってやろうと思っているのにできねえ俺は もうだめだ
gcc(ver4.3.2) のコンパイルオプションで、 -lXm -lXt -lSM -lICE -lXpm -lXext -lX11 -lm とか必要なライブラリ全てを記述しなくても -lXm だけでOKでした。 何か指定したライブラリ(この場合 /usr/lib/libXm.so.2.0.1) の依存ライブラリを調べてリンクしてくれるようですが、これって昔からそうだったのでしょうか? 10年近く前は、一つでも指定を忘れると駄目だったので、よく知らないライブラリも呪文のように指定していたような記憶があるのですが。
>>183 ライブラリが収まってるディレクトリに libXm.la ってファイルがないか?
それ読んでみ
gcc 単体で libtool ライブラリなんか見るの?
ビルドした時刻をバイナリに埋め込みたいんだけど なんかいい方法ある? 最後にリンクするときに日時がわかるものを埋め込みたい
コンパイル日時じゃなくてリンク日時? 前者は__DATE__とか__TIME__とかあるけど
>>187 Makefile で、リンクの直前にそれかけるしか無いんじゃないかな。
__DATE__,__TIME__を初期値にしたグローバル変数だけの オブジェクトをリンクごとに生成して埋め込めば?
190 :
189 :2009/12/01(火) 21:58:39
ごめん、>187と同じだった。
質問! Linux@i386(IA-32)のgccでC言語とアセンブラを組み合わせて使っています。 ebx, esi, ediは通常ならcallee-saveですが、 アセンブラ側の都合でcaller-saveとして扱わなければならない箇所があります。 今はmanを参考に-fcall-used-〜オプションを付け プログラム全体でcaller-saveとして扱っています。 関数ごとにcallee-save, caller-saveを切り替えて速度を稼ぐことは可能ですか? 可能なら方法を教えてください。
>>191 特殊な ABI を要求する部分だけ別モジュールにして、
そこだけ CFLAGS 切り替えればいいんじゃない?
昔組み込みでそんな感じにしてたけど。
ああ、でも callee-save 環境から caller-save 環境を どう呼び出かってのがあるね。どうやってたかな…。
ようわからんけど、attributeで指定するとか?
すまん、ちょっとよく覚えてない。多分 hook を挟んで どうにかしていたと思う。 ただ 個別に -fcall-used-REG を保守するのも段々面倒 になってきて、最後は「えいや」で setjmp ばりに保存 する hook にしちゃった気がする。
197 :
191 :2009/12/06(日) 16:52:18
>>192-196 ありがとうございます。
まず__attribute__((returns_twice))を調べてみます。
教えてください gccでjavaの練習をやろうと思うのですが、 gcc -vで --enable-languagesにjavaが含まれていれば大丈夫でしょうか gcj -vだとcommand not foundになります
どうしても gcj を使わなければならないという理由がないのなら Sun の JDK をインストールして勉強しれ。 # command not found に対処できない人が使えるようなものじゃないから…
200 :
198 :2010/01/08(金) 19:20:48
レストン もう少しgccを触って駄目だったらJDK逝きます
とっととJDKに逝け
naked属性な値を返す関数でreturnがないって警告が出るんだけど この警告だけ消す方法ないですか? 戻り値はインラインアセンブラ内で書いてる
戻り値をインラインアセンブラで int hoge(void) { int ret; asm ("hoge":"=r"(ret)); return ret; } みたいに書いてみたら
gotoでぶっ飛ぶのかもよ。
>>203 やっぱそれしかないですか
その方法だと余計なレジスタが増えるのがどうも
ありがとうございました
余計なレジスタは増えんでしょ -fomit-frame-pointer付きでコンパイルしてみたら
register int ret asm(レジスタ); にしたら指定のレジスタ使ってくれました gccのバージョンで変わったりしないか不安ですけど
ほうほう
戻り値に使われるレジスタ以外を asmで破壊されるレジスタに指定するという方法もあるのでは
>>207 その仕様は今まで変わったことないから大丈夫でないかとは思うが。
>>209 clobberしすぎるとcc1が文句言ってくるので程々にしませう。
ということで妙なコードを書くときは、その関数を
__asm__(
"func:\n\t"
:
"ret");
みたいに書かないとダメだと思う。
peephole2って凄いね
212 :
デフォルトの名無しさん :2010/01/19(火) 22:22:38
Linux x86_64 な環境において、gcc version 4.3.4 (Target: x86_64-pc-linux-gnu) な GCC を使って 下記のような XXX.so の中の関数を dlopen、dlsym を使ってよびだせるようにコンパイル すればどうすればいいのでしょうか? XXX.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped 調べて、-m32 -ldl をオプションに指定するようにしてみましたが segmentation fault になってしまいます。 アドバイスいただけないでしょうか?
基本的に無理
どうしてもということになれば、nspluginwrapperみたいな物を 作って何とかするしか。
gcc -m32 hoge.c でいいんじゃないか?
4.4.3
218 :
デフォルトの名無しさん :2010/02/02(火) 19:20:20
>>217 ブランチ、既にできてるよ。> gccgo
219 :
デフォルトの名無しさん :2010/02/02(火) 19:21:42
か
goってgccに入れるほどのもんなの?
政治的な圧力はあったかもね。
単にぐぐるがメンテナを出しただけだろ?
llvmじゃなくてgcc、というのが面白い。 ライセンス的にllvmの方が好まれると思ったんだが
adaとか使ってる人いるの? 金さえ出せばなんでも入れてもらえるんじゃない?
Google勤務のgccコミッターが何人もいたはず。
>>223 llvmはgccのbackendに出来るし。
>>224 カネじゃダメだろ
人とコードを出さないと
逆に言えば、人とコードの切れ目が縁の切れ目
C#とかは、金と人は出せるが、コードが出せないMSだからか。納得。
MS は自前で開発環境用意して囲い込みしたいからだろ。 と、マジレス
arm用gcc遅いなんとかしろ
arm社に文句言え
ARM社に言ってもしょうがないだろ IARとか、RVDSはもっと速いのかな?
なぜgccにはstricmpが無いんだ?アホなのか?
コンパイラの問題じゃないだろ
strcasecmpがあるから
strcmpiじゃなかったっけ まあ今となっては良い思い出
>>234 ,236,237
コンパイラとライブラリは切れば切れる関係。
例えば同じ Windows 上の gcc でも、Cygwin と MinGW で使える関数が
違うでしょ。
ところでnewlibって何なの? こういうネーミングはやめてほしいんだが このセンスはさすがに引く 古くなったらどうすんだよ
最近は年末にリリースされてるから
それならclibだと。
>>234 STRing Ignore Compareってw
センスの悪い命名…
i は Ignore なのか? case Insensitive の i だと思った 悪い命名なのは疑いようがないけど
sprintfおせーぞ gccだけおせーんじゃ なんとかしろ
文句言う前に、自分で早いsprintfを書けばいいのに
std::sprintfとかsprintfと紛らわしい 関数作るんじゃねーよ
>>248 こういう発言ってついったの方が楽しいのにね
笑われてるだけでしょ
gccスレでぐっちてる時点で...
>233 ARM固有の最適化部分のメインコミッターのほとんどはARM社からお金もらっている人々だよ 最適化で、いつまでたってもARM純正に勝てないのはARM社がコントロールしてるから ARMのプラットホーム使わないといけない人のほとんどは、gccの中身なんて弄ってる余裕が無いよ ARMを使ったPCが普及すれば、変わると思うけど
昔、玄箱スレでgccはARMよりPPCのが効率よいコード吐くって話があったけど、 状況変わらず? ARMの命令セットがやや特殊なせいなのかな
>>254 自社のコンパイラより効率的なバイナリを
生成するコンパイラは、排除するって明言しているから
どうにもならないよ。
gccの文字列処理おせーんだよ なんでgcc3.4でSSE4.2に対応してねーんだよバカ
おそい書き方したお前が悪い
pc1:
2.95.3
3.3.6
pc2:
4.3.4
4.4.3
二つずつ入れてて計4つ
>>256 使い分けりゃいいじゃん。
gccの文字列処理ってどこを指すの?
さあ、ビルトイン関数のことかも
ストリーミング命令使ったstr系関数の変態最適化ってやってるんだっけ
gccは char buf[256] = {0};って記述しても 0に初期化されることはない 腐ってやがる
>264 バージョンはいくつですか
起動時にbssをクリアしてないとか
269 :
デフォルトの名無しさん :2010/03/10(水) 18:20:46
char buf[256] = {0}; で、後ろの255バイトも自動的にゼロクリアされるのは Cの仕様?それともgccのやさしさ?
>>269 {1}のケースもどうなるか理解しといた方がいいよ。
> the remainder of the aggregate shall be initialized implicitly
> the same as objects that have static storage duration.
binutils 2.20.1
binutils-2.16.1
mallocだと0フィルされる保証はない?
普通、確保されるだけじゃないの? callocなら0フィルされると思うけど
今時gcc使ってるやつは莫迦
>276 は、何を使ってるのよ
279 :
デフォルトの名無しさん :2010/03/15(月) 00:17:30
codesourceryのg++ってdo_global_ctorsとかstartup関連がないみたいなんですけど、 自分で実装するとき、.init_arrのグローバルコンストラクタを呼び出す以外にやることありますかね? あと、libc(newlib)の初期化とかもやらないといけなさそうですが、方法がわからない。 codesourceryでstl使ったプログラムかけた人いたら教えてください。
>>274 無い。
セキュリティホールになるってんでゼロ梅してた時期もあったけど。
セキュリティホールってより、暴走の原因とか
不定値前提で安定したプログラム作れないほうがよっぽど
0クリアするくらいならdeadbeefで埋めたほうがまし
新規割り当てメモリを初期化しない場合のセキュリティーホールというのは 上位権限のプロセスが開放したメモリにある情報を読めるかもしれないとい問題
フフフフフフフフフフフフフフフ
oppai
>>285 そりゃライブラリ側の仕事でなくOSの仕事だろう
malloc(3)の話だから、OSの仕事も含むのは普通。
char buf[256] = {0}; ってやるとgccだとmemset関数を呼び出す 糞実装になってるw アホだろw
291 :
デフォルトの名無しさん :2010/03/17(水) 00:24:54
そこでmemsetを呼び出さない処理系を教えてくれ
gcc糞だからなぁ
-minline-all-stringopsって使っていいの?
>>290 どうしてほしいの?rep stosdにでもしてほしいとか?
>>289 含まねーよ。物事を区別して考えられないバカっているんだねえ。
>>284 いい悪いってか、用途によるでしょ。
バイナリはでかくなるよ
1kbも増えんだろ
>>296 あるライブラリ関数について、
C標準では定義されてないことを、
OSの方で定義していることは良くあること。
たとえばスレッドセーフかどうか。
それはそのライブラリ関数を使う側にとっての関心事項。
>>285 のは他プロセスないしカーネルにとっての関心事項。
別の話だね。
他プロセスがmallocおよびその下請システムコールを呼ぶ場合の話でしょ?
304 :
デフォルトの名無しさん :2010/03/20(土) 09:55:19
CPU Frequencyをリアルタイムで取得するgoodな方法を教えてくれ
RDTSC
306 :
デフォルトの名無しさん :2010/03/23(火) 22:46:45
プリプロセッサの処理中にメッセージを表示したいのですが、 gccでも可能でしょうか? Visual C++ では #pragma message("msg") などと書けばできたのですが。
>>305 今はだめだろ。CPUいっぱいあるから。
ついでにいうとCPU, OSの組み合わせによってはRDTSCがエミュになってしまい 数百クロックを要する。 だがそのような環境では逆に全コアでタイマカウンタが一貫してたりする。
310 :
306 :2010/03/25(木) 21:44:47
>>307 ありがとうございます。しかし試してみたところダメでした。
-Wunknown-pragmasでコンパイルしたら「無視しました」みたいなメッセージが出ました。
gccのバージョンによるんですかね。4.3.2でした。
>>307 #warningで出来るかなと思ったら引数のマクロ展開はしないとか
ふざけた事を抜かしているのであまり使えないな。 この程度は
出来るけど。
#warning Message
$ gcc -c source.c
source.c:1:2: warning: #warning Message
waring:#warning が冗長で醜いなあw
俺もそれは浮かんだが、-Werrorを入れてる環境だと止まるので完全ではないわな
Xeon 5500って、最適化オプションの名前って何ですか? nocona? core2?
>>313 たしか〜
nehalem-exかNorthwood
最適化してもあまり変わらないんだけどな SSE2を使うだけで十分だと思う
nativeでいいよ
4.5.0-RC-20100406
318 :
デフォルトの名無しさん :2010/04/14(水) 15:49:00
GCC4.4.1は-msse・最大最適化でコンパイルすると、float演算はSSE命令により 自動ベクトル化されるが、整数演算はベクトル化されない。整数移動はベクトル化 されるが、float用SSE命令が使われていた。GCCはMMXや3DNOWコードを吐かないの?
GCC 4.5.0 release
MMXは基本的にshort以下の整数に使うもんだし 飽和演算とか利用してこそだし あまり自動最適化には向かないんじゃない
MMXは切替えなくちゃ使えないから使わないみたいなのを読んだような気がする
SSEの整数命令使えばいいんじゃない
整数はベクタ化の恩恵を受けにくいからじゃないかな。 単なるコピーならfloat32でも同じことだし。
-mmmxとか-m3dnowじゃないと使わないんじゃない SSEで全部まかなえるわけだし
325 :
デフォルトの名無しさん :2010/04/15(木) 23:35:38
>>324 普通のSSEには整数命令入っていないよ
-mmmxや-m3dnowでもMMXレジスタは使っていなかった。
alignmentしてないと速くなんないからじゃね?
普通のSSEじゃないだろ最初のSSEだろ
Pen4あたりから入り始めたんだっけ?
何が? 最初のSSEはPenIIIだよ。
pen3のsseは整数演算できない
331 :
デフォルトの名無しさん :2010/04/18(日) 02:33:27
GCC4が登場した頃には整数SIMDができるSSE2の登場から数年経過しており、MMXに よる整数SIMDの需要が少なかったからか?さらに、GCC4登場初期はスマートフォンや PDAにiwmmxtが搭載されていたが、そもそも当時はスマートフォンが普及しておらず MMX系の需要は少なかったからか。で、今ではスマートフォンが普及しgccに armの128bit自動ベクトル化が搭載されたが、既に時代遅れのiwmmxtは対象外 という事か。
gccは商用コンパイラにどれくらい負けますか?
MMXはintに大体適用できないから 一生懸命対応するメリットが少ないんじゃないの
334 :
デフォルトの名無しさん :2010/04/19(月) 03:58:34
>>332 あらゆるCPUに同じコアで対応しているから、乗算結果の上位の取り出しや飽和演算で
最適コードを吐かない、MMXのように切り替えが必要な処理は実装されないんじゃね?
>>333 iwmmxtならそもそもfpu搭載していないので切り替え不要だし、加減算やshort乗算には効果あるよ
gcc4って最初かなりすごかったのに、後からどんどん遅くbuggyになってるよね プロプライエタリの工作員が本気出し始めたのかな
4.5からbackendをplugin化出来るようになったからいつでもllvmに逃げられるようになったけどね
338 :
デフォルトの名無しさん :2010/04/21(水) 02:45:57
ポインタ渡しの関数内でSIMDを使いたい場合、仮引数をstruct{long __attribute__((aligned(16)))
a[2][8];}*aのようにして、a->a[i][j]でアクセスしないとアライメントデータとして扱われない。
ソース冒頭で構造体型定義を使っても可。もっと簡単にポインタがアライメントされて
いる事をgccに分からせる方法はないの?
また、func(struct{long __attribute__((aligned(16))) a[2][32];}*__restrict a,
struct{long __attribute__((aligned(16))) a[2][32];}*__restrict b, int *__restrict c){
int i;for (i=0;i<8;i++){a->a[0][*c*4+i]=b->a[0][i];a->a[1][*c*4+i]=b->a[1][i];} }
のように二次元配列を2つ受け取り、ポインタ渡しで指定されたオフセット分ずらして
転送する関数を書くと、versioning for alias requiredとなり非SIMDコードも生成
されるが、[*c*4+i]を[(*c+=0)*4+i]とすると非SIMDコードは生成されない。
>>335 OSSへの破壊工作ってあるの?
十分簡単だろ。
341 :
デフォルトの名無しさん :2010/04/21(水) 11:15:06
http://codepad.org/AKWhbBiV のコードを g++ 4.3.2 で最適化なしコンパイルして実行したら,
--Start 1--
Destructor
Destructor
--End 1--
--Start 2--
Destructor
--End 2--
Destructor
という結果になった.
(Start 2 と End 2 の間にもう1つの"Destructor"があることを期待していた)
G++ だと,返されるオブジェクトが関数のローカル変数の場合は,
戻り値用の一時オブジェクトは作成されない仕様なの?
>>341 Start 2 〜のように戻り値と同じ型のローカル変数を return した場合、
C++ の規格でコピーの省略が許されている。 (ISO C++ 12.8 p15)
これに対して Start 1 〜のほうで必要になる、既存の変数から関数引数への
コピーは省略できない。
コピーの省略が許されているだけなので、実際にコピーされるかどうかは
コンパイラやコンパイルオプションやコードの複雑さなどで変わる可能性がある。
>>342 コピーの省略が認められているとは知りませんでした
大変勉強になりました
どうもありがとうございます
>>345 分かりにくいオプション名だなあ。
RVO(Return Value Optimization)を使うべきだよね。
頭にno-が付いてるおぷそんは嫌やな じゃあyea-があるのか?と思ったらないし
348 :
341 :2010/04/21(水) 16:09:23
350 :
デフォルトの名無しさん :2010/04/26(月) 19:48:31
for (i=0;i<128;i++)c[i]=a[127-i]*b[127-i];のように配列に乗算して順番を 反転するコードもSIMD化されない。a[i]やb[i]への書き込みが禁止されているのなら、 for (i=0;i<128;i++)c[i]=a[i]*b[i];for (i=0;i<64;i++){buf=c[i];c[i]=c[127-i]; c[127-i]=buf;}としなければならない。
どんなコードを吐いてるの?
>>350 マジ?
swap処理なんて最悪に遅いのだけど。sizeof(* c)が判らないからなんとも言えないけれど、
a*bを別に保存しておいて転送した方が速い希ガス。
最適化オプションを知らないとか?
354 :
デフォルトの名無しさん :2010/04/29(木) 02:14:24
MakefileでCPUの種類を判別してコンパイルオプションを変更したいのですが、 どのようにすればよいのでしょうか?
CPUの種類からコンパイルオプションを生成するコマンドを作ればいいんじゃない
356 :
デフォルトの名無しさん :2010/04/29(木) 05:05:38
kwsk
configure書けば
CPUの種類が自分でわからないのに、コンパイラがわかるわけがない
MakefileでCPUの種類を判別するプログラムを実行すりゃいいだろ アホか
どこにあるんだよ
CPUの種類を判別する でググれ
組み込み向けとかも判別してくれるのかよ x86用で個別にtuneしてもあんまりかわらんだろ
クレクレ言うな 自分で「やれ」
探しているものは、たいてい見つかる 必死で探せばな
すべてを網羅するようなものはないみたいだ。
>>365 ある程度までならあるってことだ。
判別不能な分はunknownでいいだろ。
細かいところはあとでなんとかしろ。
最適化してもデバッグ出来そうにないから、オプションつけても無駄のような
march=nativeで十分だって
>>366 でも90MHz Pentium で受け入れられるのに 550MHz K6-3 で蹴られるのは悲しい。
あむどはふりむかない
あむどは最適化しなくても早いって、言ってなかったけ
4.4.4
>>371 Intel みたいに gcc にコミットできないから、
最適化できないのだよ。
Windows 以外では、gcc を1割最適化できれば、
クロックを1割早くするのと同じなのにな。
つってもなー、CPUの内部アーキテクチャ変わったらまた最適化変えなきゃだろ?
これまでのAMDのCPUはフル機能命令デコーダただ並べてたりクセの少ないアーキだから (Intelはフル機能と機能限定の組み合わせで省電力&面積削減の分キャッシュ増量可能に振ってる) x86一般最適化がしてあればそれ以上は大して高速化しないと思われ
いくらあむど贔屓に作ってもgccが1割最適化するなら 印р1割早くなる気がする
>>376 Intelへの最適化は結構進んでるよ。
もちろん icc ほどじゃないが。
あむどは各板でバカにされててかわいそうでつ gccぐらい夢みさせてあげてえ
て
>>378 もっさり、じゃないぶんましではないかと。
MinGW64_x64で手持ちのアプリを片っ端から64ビット化してるんだが __fastcall の指定で大量のワーニングが出たのでびっくりして調べてみたら x64は基本レジスタ渡しで __fastcall とかは指定しても意味がないということを初めて知った レジスタ渡しの方法がVC++と非互換らしいけどいつかどっちかに統一されるんだろうか
レジスタ16個もあるからかな
383 :
デフォルトの名無しさん :2010/05/04(火) 19:07:42
アセンブラでプログラムしてるんですが、普通にasでアセンブルするとサイズが デカくなるんですが、単純にアセンブルだけしてくれるようなパラメータが あったら教えてください。スレちだったらスマン。。
LLVMの方が性能上だしなぁ gccなんて意味があるのだろうか?
性能ってどういう所がいいの?
gccのソースみると、ms_abiってのがあるよ
>>384 ffmpeg
インラインアセンブラに対応できないと思う
gccに依存してるffmpegが糞とも言う
389 :
デフォルトの名無しさん :2010/05/08(土) 11:08:45
Intel compilerでffmpegをコンパイルする方法を教えて
GCC4.5もう使った人いるのかな。
必要に迫られてsnapshotのころから。 そういえばリリース版に入れ直してなかった。
GCCを改変して、任意のアセンブラを吐かせたいのですが、 どのようなワードで検索してよいのかわかりません。 具体的には、自作した仮想マシン向けのアセンブリ言語を吐かせたいとおもっております。 アセンブラとアセンブリ言語は適当にでっち上げた物がありますので、 ぜひGCCを利用してCやC++でプログラムを組めるように仕立て上げたいです。
すれ違いだが、いま流行りの COINS を利用した方がいいんじゃないかな? あとは時代遅れの Xbyak とか。
テキストファイル置換ソフトの方があってるんじゃないか
396 :
395 :2010/05/10(月) 20:42:38
COINSは初めて知りました、ずいぶんモダンな作りをしていますね。 特定アセンブラを吐くドライバだけを作成できれば、 目的が達成できそうな感じでしょうか? 斜め読みしかしていないので、もっと深くよんでみます。 Xbyakは動的にx86のバイナリを吐くライブラリでしょうか? ソースは見てないのでなんともいえませんが、x86バイナリ生成部を オレオレバイナリに置き換えればよさそうですね。 いろいろありがとうございます。
398 :
392 :2010/05/10(月) 20:51:17
>>395 pccも改造ベースにはコンパクトで良いとの評判みたいですね。
こっちもソース覗いてみます!
399 :
393 :2010/05/10(月) 21:11:41
>>393 は釣りで、いまは LLVM 一択でしょう。(スマ
俺もLLVM一択だと思うが、 gccを改変する話に戻すと、検索ワードは「バックエンド」な
gdbの質問もここでおk?
グデブ
適切なスレが思いつかないんで、 とりあえず聞くだけ聞いて、それから誘導されるがよい
gccに問題ないから。exeファイルうんぬんも関係ない。
はい、 apachとのバイナリーレベルでの相性のようです。
"\r\n"
>>408 Windowsなら、"\n"と"\r\n"は、同じ"\r\n"を出力します。
>>409 それだとちょっと語弊があるような最終的にはそうなるけどさ
Windowsの場合"\n"だけでCRLF(復帰改行)が出力されるから"\r\n"を明示する意味はない
>>410 どうも405の問題は、Windows上においても処理系によっては
¥nがLFであってCRLFで無いという問題の様に思える。
標準出力をバイナリーモードにすればいいとかじゃないの?
413 :
405 :2010/05/18(火) 20:11:57
窓でパイプ処理やろうとすると必ず通る壁だな
415 :
409 :2010/05/22(土) 22:05:47
>>410 違ってた、GCCの場合だけは "\n" なら、\n しか出力しないようなEXEを作る。
実験はWINのサクラエディタで実行してみた。
May 22, 2010
The GNU project and the GCC developers are pleased to announce the release of GCC 4.3.5.
This release is a bug-fix release, containing fixes for regressions in GCC 4.3.4 relative to previous releases of GCC.
http://gcc.gnu.org/gcc-4.3/
なんでGNU公式の統合開発環境ってないのだろうね。
GUIなんて要らないとおもってるから。
GNU統合開発環境ってemacsじゃないの?
教祖に聞け
デバッガだけはGUIあった方が断然いい。 異論はまったく認めない。
>>530 心配性だな、とっても大人数でいじらなければいけない案件なのか?
ロングパスだな
>>422 かなり同意。 OllyDBG になれたら GDB なんて使う気にならん。
symdeb に疑問を感じなかった昔の自分が信じられん。
おまえらデバッガだの統合開発環境だの言うけど、何がそんなに便利なのか俺に見せてみろよ。 そう後輩に言った10分後、おれは「すまんかった、ちょっとこれマジで教えてくれ…。」と言っていた。
>>418 そんなこと思っていたらGDB/MIなんてないだろ。
graphite関係のオプションで詳しい説明あるところを教えてください。 キャッシュサイズとかどこで取得するのかなー?
4.5はやくしてくれねーかなー ラムダ式つかいたいから開発保留してるんだけど。
>>429 保留してる間に gcc のリリースに貢献すればよいではないか。
なんだ?って思っちゃったがGCC自体のコードをC++で書き直そうって話ね。
>>431 > The goal is a better compiler for users, not a C++ code base for its own sake.
とか言ってるわりに、とりあえずどの機能が欲しくて使うことにしたのか、よくわからんな。
むこうにも中二病開発者がいるんだろ
435 :
デフォルトの名無しさん :2010/06/01(火) 11:36:30
C言語でもオブジェクト指向なプログラミングはできるし、 継承や多態性も実現できるが・・・。 まあコード量がおおくなって手続きがうざくなるからな。
せっかくgccなんだから、objc とか ada とかで書いてみるとか。
まじめな話、gcc が c で書かれているから、いろんなプラットホームに移植されたわけで‥‥‥。
bootstrapのプロセスはどうなるんだろう?
>>437 昔はクロス環境作るの大変だったけど、今は普通だし、
開発環境そこらじゅうにあるし、問題にならないんじゃね
--enable-build-with-cxx
gcc動くけどg++ダメなんて環境はそんなになさそうだしなあ。 ついでにどうでもいいことだがRMSがこの決定に同意しているのか気にならんでもない。
おっ、初めての経験。 ちょっと複雑なデーター構造の初期化を実験してたらg++を無限 ループに入れる事に成功したw 以下のコードをg++でコンパイルしてみてくれ。 g++ 4.0.1, g++ 4.1.2で再現された。 gccではすぐに止る。 struct { int value; union { int value2; struct { int value3; int value4; } s; } u; } local = { value : 0, u : s: { value3 : 3, value4: 4 }}; こういう無限エラーループに入る. init.c:11: error: ‘<anonymous struct>::<anonymous union>’ has no non-static data member named ‘u’ init.c:11: error: ‘<anonymous struct>::<anonymous union>’ has no non-static data member named ‘u’ init.c:11: error: ‘<anonymous struct>::<anonymous union>’ has no non-static data member named ‘u’ init.c:11: error: ‘<anonymous struct>::<anonymous union>’ has no non-static data member named ‘u’ init.c:11: error: ‘<anonymous struct>::<anonymous union>’ has no non-static data member named ‘u’ init.c:11: error: ‘<anonymous struct>::<anonymous union>’ has no non-static data member named ‘u’ init.c:11: error: ‘<anonymous struct>::<anonymous union>’ has no non-static data member named ‘u’
ちなみにこれが正解だった ... local = { value : 0, u : { s : { value3 : 3, value4 : 4 }}};
書けるけど読みたくは無い構造してんなぁ
>>443 ∞ループに入る最小の構造を作るためにもうちょっと単純化してみたら面白いかもよ。
mingwのLTOまだあああああああああああ
これって知ってた?
http://sourceware.org/gdb/wiki/STLSupport 試したらこんな事が出来て涙が出た。
(gdb) list
7 map<char*, int> test;
8
9 test["hoge"] = 111;
10 test["mage"] = 222;
11 test["moge"] = 333;
12 }
(gdb) p test
$1 = std::map with 3 elements = {
[0x8049760 "hoge"] = 111,
[0x8049765 "mage"] = 222,
[0x804976a "moge"] = 333
}
これを/rオプション(raw)で見るといつもの様に $2 = {_M_t = { _M_impl = {<std::allocator<std::_Rb_tree_node<std::pair<char* const, int> > >> = {<__gnu_cxx::new_allocator<std::_Rb_tree_node<std::pair<ch¥ ar* const, int> > >> = {<No data fields>}, <No data fields>}, _M_key_compare = {<std::binary_function<char*, char*, bool>> = {<No data fields>}, <No data fields>}, _M_header = { _M_color = std::_S_red, _M_parent = 0x804b028, _M_left = 0x804b008, _M_right = 0x804b048}, _M_node_count = 3}}}
450 :
デフォルトの名無しさん :2010/06/29(火) 22:13:29
FreeBSDの人いる? gcc 4.5.0で-O2で最適化したら例外をキャッチできないケース見つけた。-O1だとOK。 再現できるか試して欲しい。 再現パターンはこんな感じ。 分岐の中にthrowがあって、最適化の結果throwにあたるコードが関数のエピローグコードの 後ろに移動してしまった場合にたまに発生。 bool flag = true; void f() { if(flag) throw 1; } int main() { try{ f(); }catch(...){ cout << "ok" << endl; } }
4.5.0 ということは ports ? 野良ビルド?
うん
結局どっちなんだよと思ったのは私だけじゃないはず
結局どっちなんだよ!
455 :
デフォルトの名無しさん :2010/06/30(水) 16:40:24
456 :
デフォルトの名無しさん :2010/07/02(金) 17:51:11
うーむ
gccデベロッパーライトで、プログラミングを勉強・作成しています。 cとc++は少々経験あります。 ロボットを動かすために、マイコンボードのレジスタに書き込むのですが、 サンプルにDDRx |= (1 << PC0)という部分があり、こちらはDDRx(8bit)の0000 0000に書き込むということだと思います。 0000 0001みたいな感じに 次のPORTx &= ~(1 << PC0)が良く分からないのですが、 こちらは初回は動作させないために0にして動かないようにしておくだと思うのですが、その場合 PORTx &= (0 << PC0)ではないのでしょうか? ~をつけてNOTにしてしまうと ↑の例だと1111 1110になってしまうと思います。 どうしてここはNOTになっているのでしょうか? それとも初期値のレジスタは1111 1111(FullBit)と決まっているのでしょうか? ちなみにPC0にはサーボモーターが接続されています。
0 << PC0 ってなんなんでしょうか? 0 はシフトしても 0 でしょう? おかしいと思いませんか?
>>458 確かに0をシフトしても0ですね。
んー…となると動きとしてはどうなってるんでしょう?
0000 0001に対して 左シフトで 0000 0010にして、それをPORTx 0000 0000だとした場合
1111 1101にするってことですよね
ん…違うのか、 PC0の場所が最初、 PC1が次だと仮定して
0000 0001を左シフト 0000 0010 PC1が0000 0010左シフトで 0000 0100
で、現在のPORTx が0000 0110になっているからこれをNOTしてあげれば
1111 1001で、使用するPC0とPC1は停止状態になりますよってことか
でもその場合残りの部分がビット立っている状態になってますが、問題ないのですか?
使わないのであれば全てビットをlowにしておかないと何かもやっとするのですが
書いてきて混乱してきた PORTxっていうのは、常時フルビット0xFFになっていて 例えばPORTAであれば、対応するのはPA0〜7になり 0xFFの0ビット=PA0, 1=PA1 ... 7=PA7って割り当てられている…? シフトする理由が分からない…シフトする場合↑の通りであるのならば PA7はオーバーフローして、消えてなくなってしまうし、循環シフトになっているのなら シフトしてけばしていくほどおかしくなるような…
&= ってなんの記号? わかってる? それから、他人とのコミュニケーションにフルビットとか妙な用語は使わないように。 運転免許マニアの間では全ビットが立ってる、という意味で使われるようだけど。
>>461 フルビットって使わないの?すまん、知らなかった
&=ってANDって意味じゃないの?
cで言えば、 a = a & b;といった形だと思ってたんだけど
PORTx = PORTx & ~(1 << PCx);
今回チルダが付いているから、NOTANDだと思うけど
トリップ付けておきます 基本情報とか、c勉強した時に例えば2の補数とか説明する・されるときに フルビットって使ってたんで一般的だと思ってました。
>PORTx = PORTx & ~(1 << PCx); ここまで解ってて何故わからないのかがわからない そのまま「PORTx の PCx ビット目を0にする(PCxビット目以外はそのまま)」って読めるだろ
>>464 うーん…
何となくこのやり取りをしている間に、考えてたら分かってきたような
気もするのだけれども、
NOTANDがかかるのはPORTx全体ではなくて、 & ~(1 << PCx)と書かれているPCxの場所
だけをNOTANDするってことで大丈夫? PORTxに対して行っているからPORTx全体にNOTANDがかかってると思ってた。
後は、シフトする部分がいまいち…
これは、0001を0010にするとかではなくて、ビットをずらすのではなく
0000を0001にしますよ、的な感じでいいです?(1を立てる
軽く自分なりにまとめると、 &~がかかる部分は、PCxの場所だけで シフトするというのは倍々にしていくシフトと違い 1であれば、その場所に1ビットを立てるということで問題ないでしょうか?
連投ごめん ぐむむ、でもそれだとやっぱり(1 << PCx)の1が1を立てるであれば、 へし折るという意味で(0 << PCx)でもいけるような…orz テンプレっていうか、こういうものだっていう意味で0を作るのならばチルダ(NOT)して 作れってことでしょうか?orz
gcc全く関係ない
>> gccでのプログラミングでしたので、ここで質問したのですが、 c / c++の方でしたでしょうか? それとも、また別な場所です?
なんていうか…もうノートにビットパターン書きながらひとつづつ考えてください。 8ビットで PORTx : 0x0f, PCx : 3 と仮定するね。 「(1 << PCx)」 ってのは (1 << 3)だから 00000100 になるよね?すると 「~(1 << PCx)」 は 11111011 と 3ビット目だけが0の値になる。 「PORTx & ~(1 << PCx)」 は 00001111 & 11111011 だから 00001011 でこれをPORTxに代入する。 PORTx の値は 00001111 だったものが 00001011 になってる。つまり3ビット目が0になった。 あとはPORTxやPCxの値をいろいろ変えながらノートに書いて考えてくれ… # これでわからないなら適当な初心者スレでたのむ
Cとかの質問スレだな
472 :
470 :2010/07/21(水) 10:51:39
ごめん。書いてあるのは PCx : 2 の場合だった><
こいつの制御するロボットには絶対に近づきたくないなw
>>470 やっと理解した、ありがとう
シフト演算激しく勘違いしてたわ (1 << PCx)の1は1ビットずらすのではなく
1をPCx分ずらすでしたね。過去ログ見てると恥ずかしい
>>470 見て、テストケースで100を2ビットシフトして400作って見てやっと分かった
NANDに関しても、0シフトすればいいんじゃね?って思ってたのが非常に恥ずかしい
0した後に残った結果は0じゃないか…0x0F & 0x00 = 0
もやもや解消されました。頑張る
id出てないから分からないけど答えてくれた人たちthx
>>473 ロボに罪ハナイ…
>>474 がんがれ。ロボがコサックダンス踊れるようになるくらいまで。
GCC使ってりゃこのスレってことなら PS3やWii、Androidの開発もこのスレになるな
携帯じゃなくても良いからMIDIのシーケンサーつくってみろ。 ずれるかずれないかわかる。
478 :
デフォルトの名無しさん :2010/07/30(金) 21:54:57
質問です。 TOPPERSって言うフリーの組込みOSがあるのですけど、そのソースコードの一部に こんなマクロが定義してあってチンプンカンプンです。 IA-32の命令に"s"とか"d"ってあったっけ? #define OBJECT(x,y) __asm("d" #x "," #y "@"); #define MEMBER(x,y) __asm("s" #x "::" #y ",(%0),(%1)@" ::\ "i"(sizeof(((struct x *)0)->y)), "i"(&((struct x *)0)->y)); #define VAR(x) __asm("s" #x ",(%0),(0)@" :: "i"(sizeof(x))); #define EVAR(x,y) __asm("s" #y ",(%0),(0)@" :: "i"(sizeof(x))); #define SVAR(x) __asm("s" #x ",(%0),(0)@" :: "i"(sizeof(x[0]))); #define DEFS(x) __asm("s" #x ",(%0),(0)@" :: "i"((unsigned long)x));
>>478 __asm の内側はアセンブラの世界。
gas の擬似命令を含むことも出来る。
C/C++ では隣接する文字列リテラルは連結される。
ここで聞くよりTOPPERSのメイリングリストで聞いたほうがいいような気がするんだけど。
どうだろう。 あくまでも gcc 側の機能についての質問だからこっちでいいような気もする。
483 :
478 :2010/07/30(金) 23:38:46
>>479 文字の連結は理解しているつもりですが、IA-32の命令や疑似命令のようにも思えない。
と言う訳で手元のMacOSXでTOPPERSをコンパイルしてそのマクロを使うkernel_chk.cを
生成しようと思ったけど、LINUXではないのでやはりできず。
来週、会社へ行くまでkernel_chk.cを生成できそうにありません
>>481 TOPPERSの機能に関する質問ではないのでそれはできません
TOPPERSってそもそもIA-32をサポートしているのでしょうか。 インテルのCPUで組み込みってあまり聞かない気がします。 私も仕事でTOPPERSを触りましたけど、そのときはルネサスのSHでした。 コンパイルに使用したコンパイラは、もちろんSH用のgccです。
ていうか、どんなasm命令に展開されるかは 単純にそのマクロ定義部と呼び出している箇所いくつかを拾い出して それをcppかければ良いだけでは。
>>483 評価版のVMwareを手元のMacにインスコしてLinuxインスコしろ。
487 :
478 :2010/07/30(金) 23:50:04
488 :
478 :2010/07/30(金) 23:51:31
マクロ名からしてラベル作ってるんじゃね?
>>488 いやLinuxでなくてもGCCは使える
っていうか、プリプロセッサの出力、というだけなら
機能を持たないC/C++コンパイラは皆無だろ。
cppを別途持っているかは別として
Linux固有のヘッダファイルが1つでもインクルードされてたらアウトですよ。
492 :
478 :2010/07/31(土) 00:32:17
>>490 というかTOPPERSで実際にどのようにマクロが使われているのを調べるにはGCCが使えるだけではダメなんです。
cfg,chkというTOPPERS独自のバイナリプログラムがアプリケーションの設定ファイル*.cfgを参照して
kernel_cfg.cとkernel_chk.cを生成するんです。
kernel_chk.cが実際の使用例になるのですが、これを生成するにはLINUXが必要なんです。
手元のMacOSX(FreeBSDベース)だと生成できなくて・・・
493 :
478 :2010/07/31(土) 00:36:13
というわけで、来週会社に行ってkernel_chk.cを入手するまでこの件は保留させて下さい みなさんお騒がせしました
>>492 そういう状況では、さすがにスレ違いですね。
空きマシンにUbuntuなどをインストールして
Linux環境を構築する以外に、抜け道はないと思います。
JSPならcygwin+gccのクロス環境がある。 Macは知らんけど。
VMWARE とかで Linux を導入すると楽かも
TOPPERS固有の、コンフィギュレータまわりかメタデータか何かを生成するためのコードでしょ。 TOPPERSのソースコードの質問をTOPPERSのメーリングリストでしてはいけない理由がわからん。
質問の意図はasm自体がよく分かっていないってことでは?
つーかメーリングリストが嫌ならOS板にスレがあるからそっちで聞け
GCCで文字コードをunicodeで やるにはどうしたらできますか?
「やる」とはどういうことか定義してくれ。
unicode文字列をwstringにインプットするにはどうやりますか?
>>503 wstring s = L"あいうえお";
これで何か不満か?
いいえ、それはなにか設定が無いと出来ないから 教えてください。
オプションで -finput-charset と -fwide-exec-charset に文字コードを指定すればいいかもね。 gcc をビルドするときに iconv がリンクされていない場合には使えないけど。 あと、ライブラリ側も貧弱なことがある。
>>505 できないというなら、やってみてどうなったのか言ってみろよ。
4.5.1
510 :
478 :2010/08/02(月) 21:14:16
自己解決
>>478 のマクロだけど__asmを使っているだけでアセンブラではなかった。
もちろんIA-32のオペコードでもなかった。
ただgccを利用した文字列処理をするために利用しているだけだった。
例えば、kernel_chk.cではこういう風に使われていて
void checker_function(void)
{
DEFS(TMAX_TPRI);
MEMBER(queue,next);
OBJECT(task_6,LOGTASK);
}
これらをコンパイルして.sファイルに変換すると
#APP
sTMAX_TPRI,($16),(0)@
squeue::next,($4),($0)@
dtask_6,LOGTASK@
#NO_APP
となるけど、もちろんこれをアセンブルすると当然エラーになる。
TOPPERSはこれをアセンブルしないで、jsp/utils/gencheckというツールにかけて
jsp.chkという静的APIファイル(カーネルの設定ファイル)の設定チェックファイルを生成する。
最終的にこういうテキストになる。
sTMAX_TPRI,16,0
squeue::next,4,0
dtask_6,LOGTASK
C言語の関数の中でこのマクロを使っているのは、Cとして定義された関数名、変数名、型名などを使えるからC言語にしているだけ。
まさか__asmにこういう使い方があるとは・・・
511 :
デフォルトの名無しさん :2010/08/04(水) 15:21:05
#errorの行に到達したら即座に処理を停止するオプションとかってありますか? 何がしたいのかというと,コンパイル時に-Dオプションでパラメタを与えていて パラメタを書き忘れた場合にずらずらと大量のエラーが表示されるのを防ぎたいのです. #ifndef 〜 #error 〜〜〜 <-- ここに到達したら即座に停止する #endif
513 :
501 :2010/08/05(木) 12:46:21
4.5で wstring=u"あいう"とやったらエラーになりました uをLに変えてもエラーになりました。 const char*=u8"あいう"とやったらエラーにならないけれど 文字コードはSJISでした。 ユニコードにするにはどうしたらいいですか?
GCCはあきらめろ Visual C++マジおすすめ
もしもGCCでユニコードがつかえるときのためには strings<T>のTを変えるだけで出来るようにプログラムを作っておけばいいんですか? それとも他に何か必要ですか?
必要ありますん
ありますんとは否定形ですかそれとも肯定形ですか?
曖昧形です
ん
>>513 --input-charsetと--exec-charsetは指定している?
Cygwin 1.7で動いているよ。
CentOS5.5上でXML関係のプログラムをmakeしたところ、以下のエラーが発生してしまいました。 ぐぐったところgccのバグの可能性もありますが、プログラムやstlportの方が問題でどこを見ればよいか教えて頂けないでしょうか。 gcc:4.1.2 ld:2.17.50 ccache g++ -fcommon -fPIC -DLINUX -DCENTOS -DLYNX386 -D_MULTITHREADED -DLYNX386_V230_SOURCE -D_POSIX_SOURCE -DECC_MC_IF_VME -DPOSIX1B_SOURCE -DPOSIX1C_SOURCE -DLYNX386_V310A_SOURCE -D_XOPEN_SOURCE -D_SVID_SOURCE -D_REENTRANT -D_GNU_SOURCE -D_BSD_SOURCE -o ../../../XMLPROG -g -Wall -Wno-format -I. -I../.. -I- -I../../include -I../../include/stlport -D_STLP_NO_STATIC_TEMPLATE_DATA xml_prog.cpp -L../../../libfile -lmxmllib -lmxmlpath -lmxmllib -lxslt -lxml2 -liconv -lstlport_gcc -lz -lm cc1plus: note: obsolete option -I- used, please use -iquote instead `.gnu.linkonce.t._ZNK4_STL9money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_bRNS_8ios_baseERiRNS_12basic_stringIcS3_NS_9allocatorIcEEEE' referenced in section `.rodata' of ../../../libfile/libstlport_gcc.a(monetary.o): defined in discarded section `.gnu.linkonce.t._ZNK4_STL9money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_bRNS_8ios_baseERiRNS_12basic_stringIcS3_NS_9allocatorIcEEEE' of ../../../libfile/libstlport_gcc.a(monetary.o) `.gnu.linkonce.t._ZNK4_STL9money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_bRNS_8ios_baseERiRNS_12basic_stringIwS3_NS_9allocatorIwEEEE' referenced in section `.rodata' of ../../../libfile/libstlport_gcc.a(monetary.o): defined in discarded section `.gnu.linkonce.t._ZNK4_STL9money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_bRNS_8ios_baseERiRNS_12basic_stringIwS3_NS_9allocatorIwEEEE' of ../../../libfile/libstlport_gcc.a(monetary.o)
522 :
521 :2010/08/31(火) 21:34:15
自己解決しました。 XML関係のプログラムをコンパイルするため、STLportのヘッダーファイルを変更したのですが、 その時STLport自体を再ビルドしていなかったのが原因でした。
リンカスクリプトの中で#ifdef〜#endifみたいなことをやる方法はありますか? やりたいことはROM焼きの時とモニタ上で動かす時で各セクションのアドレスを変えたいのですが リンカスクリプトをコピーして書き換えるのは嫌だなぁと・・・
Makefileでcppを使って生成するんじゃだめかね
>>523 条件式とDEFINED組み込み関数があるじゃん。
リンカスクリプト二つ用意して、 makeするときに、 ROM焼きとモニタの二つが出来るようにしておくとか
レスありがとうございます
>>524 単なるテキスト整形ツールとしてcppを使うわけですね
diffとpatchでとは思っていたんですがそれは思いつきませんでした
>>525 DEFINEDを見落としていました
まだ成功してませんがこれでいけそうな・・・感じ
>> 526
2つ用意するのが面倒という話でして
メモリの割り当てが違うぐらいだと思うんだけどな
GCC-4.6-20101002 のビルド途中、s-tm-texi (tm.texi?) の所でエラーが発生して終了する(ノД`)シクシク
以下の所とエラーの表示内容は同じで
ttp://mingw-w64.pastebin.com/N1ancXbR Verify that you have permission to grant a GFDL license for all new text in tm.texi, then copy it to (中略) doc/tm.texi.
って最後に表示される
ヽ(`Д´)ノウワァァァン
組み込みソフトの開発にgccを使用しており、最近gcc3.4からgcc4.4.3に乗り換えたのですが、 -Osの指定でいくつかの関数がインライン展開されてしまい、コードサイズがgcc3.4の時より 明らかに大きくなってしまいます。 で、gccのソースを見てみると以下のようなコードが・・・ プロセッサに関係なく、ほとんどの場合にインライン展開はコードサイズは大きくなると 思うのですが、なぜかこうなっています。 ==================== gcc/opts.c ========================== void decode_options (unsigned int argc, const char **argv) { :略 if (optimize_size) { /* Inlining of functions reducing size is a good idea regardless of them being declared inline. */ flag_inline_functions = 1; :略 ========================================================== -fno-inline-functionsで問題は回避できるのですが、なぜ-Osで-finline-functionsを 許可しているのか腑に落ちません。 なぜこうなっているのかご存知の方、いらっしゃいませんでしょうか?
531 :
530 :2010/10/05(火) 15:01:14
補足です。 インライン展開されている関数は(staticのついてない)globalな関数なので、インライン 展開されたコードだけでなく、独立したコードも生成されています。 また、クロスコンパイラだけでなくネイティブ(i686-pc-cygwin-gcc)でも同様の現象を 確認しています。
>>531 実際のところは判りませんが、非常に小さな関数の場合はインライン展開した方がサイズが小さくなります。
例えば、x86で次のようなソースを-Osでコンパイルするとその下のリストのようになります。
--
static int func(int d) {return d * d;}
int ff(int d) {return func(d);}
--
_ff:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %eax
popl %ebp
imull %eax, %eax
ret
--
因みに、staticを外したらこうなりました。
--
_func:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %eax
popl %ebp
imull %eax, %eax
ret
--
_ff:
pushl %ebp
movl %esp, %ebp
popl %ebp
jmp _func
--
staticじゃない関数もインライン展開してしまうのは、確かにちょっと腑に落ちませんね。
533 :
530 :2010/10/05(火) 16:18:19
まぁあれだ、-Osはそこまで厳密に実装(カスタマイズ?)されていないに違いない。 必要に応じて制限すればよかろ。 それにしても、>532の最後のjmpは秀逸だな。
そう?
536 :
530 :2010/10/05(火) 17:57:06
>>534 レス、ありがとうございます。
>まぁあれだ、-Osはそこまで厳密に実装(カスタマイズ?)されていないに違いない。
そうなんですかねえ。
コメントに"good idea"とまで書かれているから単純なバグじゃないと思うんですけど・・・
-Osなんて組み込み以外では使わないだろうから、だれも気に留めてないのかなあ?
changelogとかでソースの改変履歴を探ってみたら、 誰がいつ改変したかはわかるでしょ。その情報を元にgccのmlのlogを漁ってみたら、何かわかるかもね
538 :
530 :2010/10/05(火) 22:55:52
>>537 ヒント、ありがとうございます。
ChangeLogでは見つけることができませんでしたが、コメントの
/* Inlining of functions reducing size is a good idea regardless of them
で検索して下記を見つけました。
ttp://gcc.gnu.org/ml/gcc/2005-07/msg00547/optimize_size 元々、max-inline-insns-autoでサイズが大きくならないようにしていたものを
+ if (optimize_size
+ && newsize > to->global.insns)
と、サイズを厳密に比較するようにこのパッチで変更したようです。
ところが、gcc4.4.3のソースにはこれに該当する部分が見つかりません。
どうも、インライン関係をipa_inline.cに分離したときのドサクサで、この
部分のコードが失われてしまっているようです。
気が向いたら、bugzillaかpatch-mlに報告しとけばいいかも
なぜgccってcluster openmp未サポートなんですか? バカなの?技術力ないからなの?
openmpが嫌いとか?
コンパイラの領分じゃないと考えてるんじゃないの?
>>541 OpenMP自体は実装してるでしょw
Clusterの方はIntelの(R)だし、
Intelのコンパイラで使えるから、
やる気のある人が出にくいんじゃないの?
一応TODOに入ってるみたいだけど。
あ、gompのことか
てst
>>529 (´・ω・)やっとこ原因がわかったかも・・・orz・・・イマゴロカヨ
問題の部分は、下記の tmp-tm.texi から tm.texi を作成して、後にソース元にある tm.texi と cmp する所でした
改行コードが違う?為に error になっていたらしいです(゚∀゚)
修正して make ・・・今度は lto-plugin の所で sys/wait.h 無い言われて error ・・・アッヒャッヒャ!ヽ(゚∀゚)ノアッヒャッヒャ!
関係無い?けど target.def のディレクトリ先が間違ってるよね?
Makefile.in
----------
s-tm-texi: build/genhooks$(build_exeext) $(srcdir)/doc/tm.texi.in
$(RUN_GEN) build/genhooks$(build_exeext) \
$(srcdir)/doc/tm.texi.in > tmp-tm.texi
$(SHELL) $(srcdir)/../move-if-change tmp-tm.texi tm.texi
@if cmp -s $(srcdir)/doc/tm.texi tm.texi; then \
$(STAMP) $@; \
elif test $(srcdir)/doc/tm.texi -nt $(srcdir)/doc/tm.texi.in \
&& test $(srcdir)/doc/tm.texi -nt $(srcdir)/doc/target.def; then \
echo >&2 ; \
echo You should edit $(srcdir)/doc/tm.texi.in rather than $(srcdir)/doc/tm.texi . >&2 ; \
false; \
else \
echo >&2 ; \
echo Verify that you have permission to grant a GFDL license for all >&2 ; \
echo new text in tm.texi, then copy it to $(srcdir)/doc/tm.texi. >&2 ; \
false; \
fi
----------
(´・ω・) patch が出てるようだけど、マージされることを期待して取りあえず次の定期リリースまで放置〜
マージされなかった・・・(´;ω;`) とりあえず disable-lto & CFLAGS へのオプション無し(-O2 とかやると error になった)で一応ビルドは出来た(gcc-4.6-20101016 rev.165566)
lto-pluginで失敗するのを回避する方法としては sys/wait.hをコメントアウトして WIFEXITED(status) WEXITSTATUS(status) をmingw用のを作れば、コンパイルは通りそうだけど (´・ω・)にはわかんないかな?
何か変なのが棲み付いてるな……
>>550 (´・ω・)レスありなと
取りあえず msys のを参考に wait.h を作成して対応しますた
一応 build は出来た・・・動作は未確認・・・
4.5.x は特に wait.h 対策しなくても build 出来たのに
4.6.x は開発途中だからなんかな(´・ω・`)
最近、Core2 & i の最適化パッチが投げ込まれて、今後も+(0゚・∀・) + ワクテカ +
>>552 とりあえずおまえはコテつけろ、(´・ω・)をあぼーんすると他で支障が出るだろ
>>556 スレの内容に関係ないレスすんな!どっか逝け基地害
>>557 スレの内容に関係ないレスにレスすんな!どっか逝け基地害
(´・ω・)コテつけたよ
自己紹介も
私です!!!!!
識別子のunicodeとか\uXXXXサポートとか今どうなってるの?
おぉーい、誰かいます? こちらへ誘導していただいたので来ました。 gcc(4.5.1)のc-parser.cだけを利用しようと思っています。 で、VC++でコンパイルしているんだけど、 gimple という構造体の宣言、この構造体が未定義のようでエラーが出てます。 gccのフォルダ丸ごと検索してみたけど、自分の能力では見つからず。。。 例えば、 gimple stmt; というステートメントでエラーが発生してます。 どうやりゃ解決できるんでしょうか? おながいします。 やったこと: VC++の新規プロジェクトに、パーサのコードおよび関連ヘッダを入れてコンパイル。 コンパイラにヘッダがないと言われれば、追加してあげる。
gcc/gimple.h gcc/vec.h
gimple_statement_d が本体みたいだけど
>>564 >>565 ありがと。何とかなりました。
現在、bitmap.hにて、同様に今度は
bitmapという構造体(識別子)がないとのたまわれてます。
確かにないし。
どうすればこのエラーを解決できるんですか?
そうやって芋づる式に足りないものを追加していくと 最終的にgcc全体を取り込む結果になったりして
>>567 (w
いやさすがにそれはないなぁ
でも、やりたいことは、
Cからデータフローグラフを作る
なので、パーサをおさえた後が大変、
というのは自覚してまふ
#というかDFG生成のフリーウェアあったな
564ですが…
>>566 GTY/gengtypeは理解したの?
gimple.hで出てきたでしょ。
doc/gty.texi, doc/gccint.texi読まないと、gccの改造なんて無理。
パーザ借りるだけだとしても。
>>568 それこそgimple使えば簡単なのに…
そのためにあるgimpleなんだけど…
つーか、Doxygenでよくね?w
Doxygen? データフロー解析するんでしょ?
>>566 おまいはとりあえず、gccをビルドしたときのログを全部残しておいて、
関連するファイルをコンパイルしている行をコピペして-Eオプション追加して
走らせてみろ。何がどうインクルードされてマクロ展開されるか全部出てくる。
>>563 なんでgccでコンパイルせずにVC使うの?それだけでかなり難易度上がってるとおもうが。
失礼なこと言うようだが、あなたには難しすぎることにように見えます。
>>572 そんな面倒なことしなくても、-save-tempsオプションつけてビルドすればいいんでない?
bitmap_head_def? c-parser.cってだだの入り口でしょ
575 :
デフォルトの名無しさん :2010/11/27(土) 13:36:58
UNIXのコンパイラってなんでアセンブラのソースを生成するの? VCみたいに直接バイナリ吐いて必要になったらときに逆汗した方が速くない?
gccの場合、アセンブラが中間言語になってます。 ニーモニックがUNIX形式。 ただし全てのコンパイラ@UNIXがこのスタイルなわけではありません。 ちなみに現代のコンパイラでアセンブラが消費する時間は些細なものです。
gccとbinutilsで似たようなコードを保守管理するのは二度手間じゃない? 実はマンパワーが相当有り余っててそんなの全然問題じゃないとか?
gccだけでカンファレンスが開かれる状況です。
>>575 VCが逆アセンブルするの? んな馬鹿な。
リスト出力オプションを指定したときにそんな胡乱なことをするとでも思っているのか?
それからgccはアセンブラを抱えてません。(ローダも) 通常の環境ではbinutilsを使ってます。
gas経由でやってるのはinline asmを処理するのが楽だからじゃね。
GCC はインラインアセンブラを使ってる箇所も最適化の対象にしてる。 そのままアセンブラに丸投げしているわけじゃない。
中身の最適化はしてないでしょ。 引数に関しては最適化してるけど
LLVMのコンパイラclangは直接 .o 吐けるようになったぞ。 ていうかとうとうbinutilsの置き換えにも走りだした。 スレチスマソ
arch固定だからかな
そもそもアセンブり言語っていらなくない? 人間が計算機と比べてバカだからしょうがなく作ったものなのに GCCとbinutilsのインターフェイスになってるとかどうも違和感ある
gccにgasを取り込むことはしないと思うけど gas経由でやってるから、inline asmが使いやすくなってる感じだけどね
もしや、%0とかのことかな?
>>584 LLVMはそもそもVMの中間言語があるじゃない。
GCC-4.5.2 RC が出たお
RCは触る気になれんとです
gcc -E -dM hogehoge.c ってやるとマクロ定義が出てくるんだけど、 #define HOGE 1 #define PIYO HOGE+1 こんな感じで値は展開されてない。これを #define HOGE 1 #define PIYO 1+1 こんな感じに展開してくれるオプションってないん?
そんな処理はしていないんだから当然だ
cpp通せばいいんじゃね
>>596 あー、実際に使うときに展開するのか orz
>>597 ど、どうすれば
もしかして、gcc -E -dM で出てきた結果を実際に使ってもう一回プリプロセッサに通せばいいのか
#define HOGE 1
#define PIYO HOGE+1
HOGE;
PIYO;
↓ gcc -E
1;
1+1;
展開された結果としてコンパイルされるんだから無問題だと思うんだが、 展開された結果のソースを欲しがる理由が想像できない。
>>599 質問者じゃないけど俺は長ったらしいマクロを書いてコンパイル通らないときに重宝してる
BOOST_PPとか-Eないとデバッグ不能だotx
>>599 こんなID的なものの実際の数値を知りたいとき
#define MSG_ID_BASE 1000
#define MSG_ID_HOGE (MSG_ID_BASE+1)
#define MSG_ID_PIYO (MSG_ID_BASE+2)
>>598 のやりかたで一手間かかるけどいけそうだ。おまいらサンクス
603 :
602 :2010/12/12(日) 22:45:41
失礼、ボタンを押し間違えたです。 なるほど、そうすると#warning辺りにprintf的出力でマクロ展開後の値を出力できる 機能があると便利になりそうですね。
↓みたいなのは出来そうだが #define PRAGMA( x ) _Pragma( #x ) #define MESSAGE( x ) PRAGMA( message( x ) ) #define A 1 #define B (A + 1) MESSAGE( B ) // (1 + 1) と展開 出て来るのは 2 でなく (1 + 1) だからいまいちかもしれんが
gccを使ってcygwin下で動くアプリを開発する場合、gdb以外にどのようなデバッガが 利用できるのでしょうか? ワンキーでステップ実行しながら、これに連動して対応するソースコードの(前後含めて)表示や、 複数の変数・構造体のメンバーの値を連動表示できるような機能のあるもの(必然的にGUI?)を希望。
(´・ω・) gcc-4.5.2 来た
いまさらですけど CentOSにはboostがデオフォで入ってたのね。 知らんかった。 今後よろ
SPEC CPU2006で、最近のOpeteronマシンの計測結果みると x86 Open64 Compiler Suiteというコンパイラが使われていますがこれは何なの? GCCとは別物?
なんかmlにうんこが…
(´・ω・)何あれ?
TDM mingwはなんでTDM GCCにかわっちゃったのかね。
gcc 4.6.0、どうよ?
まだ、リリースされてないよ。
int APIENTRY WinMain
ゲーツェーツェー
ぐにゅしーこんぱいらー と呼ぶ人がいました 実際C(C++)以外で使ってる人に出会ったことないけどさ
go
コマンドとしてのgccは今でもそうじゃね?
CPP CXX CC 違いがサッパリわからん
++を斜めにしてXXとかよく考えるよな
>>601 遅レスだが、過去スレで同じ質問したことがある。
$ cat hoge.h
#define FOO 1
#define BAR FOO+1
$ cat hoge.c
#include "hoge.h" // その調べたいマクロが入ってるヘッダやコードをとにかくincludeするダミーコードを作る
int main(void) { return 0; }
$ gcc -g3 -fno-eliminate-unused-debug-types -fno-eliminate-unused-debug-symbols -o hoge hoge.c
$ gdb hoge // ダミーバイナリをロードしてgdbに値を出させる
(gdb) b main
(gdb) run
(gdb) p FOO
$1 = 1
(gdb) p BAR
$2 = 2
(gdb)
これでどうだろう?ただし大き目のプログラムはチョー巨大になる。
>>625 その方法を手元にある以下の組み合わせで試したところ
p FOO が No symbol "FOO" in current context. となってしまいました。
gcc version 4.2.1 (Apple Inc. build 5664)
GNU gdb 6.3.50-20050815 (Apple version gdb-1510)
私がやり方を間違えているか、gccやgdbのバージョンに依存する方法だったりしますでしょうか?
いま -march って意味あるの? 俺んち core2duo とかなんだけど。
>>626 runして途中で止めた状態でそうなる?
未実行のロードしただけだとこっちでもそうなるけど、実行中の
コンテキストだとちゃんと見える。
>>627 -march=core2とするより-march=i686とするほうが速かったりはするが
意味が無いわけではない
>>629 あ どもです。
i686 で言いわけね。
最近の COREi7 とかもi686でいいのですか?
このオプションがわかるアプリつくりタイです。
$ chkmarch
core2duo:i686
$
みたいなのありますか?
uname -m
>>631 ぐぇ これでいんですか?
知りませんでした。orz
./configure するときに中で使ってるでしょ
俺の PC で「なか」を変換すると「膣内」が第一候補なんだけど、これってどう思う?
むしろなぜ下ネタはどんなにつまらなくても面白いのかの方が気になる。
産婦人科の先生だと思います。
638 :
デフォルトの名無しさん :2011/01/19(水) 21:25:56
へえ
華麗に保守
x32いらねー
>>640 GCCでは当分使わない方がいいってこと?
643 :
デフォルトの名無しさん :2011/03/01(火) 11:33:24.32
K&Rスタイルでコンパイルするオプションってありますか? 規定の実引数拡張をK&Rスタイルにしたいので。
-traditionalでいいんでないかい
>>640 GCCのx86-64の数学ライブラリ遅すぎ
x86-64ではSSE2で演算するするのとSSE2が超越関数などの命令を持ってないから
それらがライブラリ依存になるからかな
超初歩的な質問なんですけど 最近Linuxでプログラム初めてg++でprintf("Hello World!");ってやってみたんですけど、表示されません gdbで実行すると出るんだけど、そういうもんなんですか? コンソールなんだからgdb使わなくてもHello World!って表示されてくれよと思うのですが
"Hello World!\n"とか
とりあえず、環境とソースとコマンドラインを全て書こうか $ uname -rm $ g++ --version | head -1 $ echo ${LD_LIBRARY_PATH}
>>650 2.6.18-194.32.1.el5 x86_64
g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-48)
出力なし
#include <iostream>
int main()
{
printf("Hello World!\n\n");
return 0;
}
g++ test.cpp -o test
わかった testにしているのが悪いんだよ testはコマンドとして存在している $ which test
というかカレントディレクトリに存在するコマンド実行するときは ./test とかした方がよい
というか(Linuxなら)カレントディレクトリにしか存在しないコマンドは./を付けないと動かないんじゃ
そんなことはない
PATH に . を含めればできるが、やってはいけない。 たとえばダウンロードしたアーカイブを展開した中のディレクトリで、意図しないコマンドを 実行させられるかもしれない。
test.cpp: In function ‘int main()’: test.cpp:5: error: ‘printf’ was not declared in this scope
でっていう
>>659 だよなぁ。
msys 環境だとデフォルトで PATH の先頭にカレントディレクトリが付いててブチ切れそうになったわ
/usr/local/bin/a.out
665 :
647 :2011/03/08(火) 00:46:04.66
$ g++ test.cpp -o hello $ hello としてもダメでした。 $ ./hello で、しっかりHello World!と出力されました。 結局、Linux的にはどのように実行するのが正しいんですか? 上記のようにドット付けて実行するのはダメなんですか わざわざ絶対パスで実行するんですか?
./helloでいいよ。 PATH環境変数に.を追加するなんてことはするべきでない。
PATHって環境変数のPATHのことでしたか。実行するときのパスだと勘違いしてました。 わかりました。ありがとうございました。
LinuxはDOSと違って、「実行ファイルが先」に認識するもんじゃない。 ファイルであると認識させたいときはパスが必要。 よって、カレントディレクトリにあるもの実行したいときは "Fuckin' Macin'" ではなく、 "./Fuckin' Macin'" でないとダメ。 融通が利かんアスペルガー相手にしてると思えばよい
最初の二行からして意味不明
特にMS-DOSは 「カレントディレクトリにその名前の実行ファイルやフォルダがあるかないか先に探してから」 「なければ環境変数に記された場所の下」 って親切な設計だが、Linuxはそんな配慮なんかしない。
最初からマルチユーザー前提で設計されたものと、 シングルユーザー前提で基本設計がされちゃったものの違い、だろ単に。 それを「親切」とか言っちゃうのははっきり言ってどうかとだが。
それ、シングルマルチ関係なくネ?
変に小細工しないでUNIX仕様そのままにしとけばよかったのにね
祖先をたどっていった CP/M には階層ディレクトリなんてなかったから、 そんときの動作を引き継いでるんでしょ。
まあ20年前のバイナリが今でもちゃんと動作するという点は 評価すべきだと思う
DOSのファイルシステムじゃ、 実行ファイルの区別がつけられなかったから、拡張子に.com付けてたろうが
command.com
>>676 とりあえず動いてるがそれは表面的な所だけで
ファイル名にスペース含められなかったり
ロングファイルネームが使えなかったり
2GB以上のファイルにアクセスして壊したり
そのまま使ったら色々トラブルぞ
なにその無理矢理な理由は
お前ら、たまにはGCCの話をしろよ…
ドザはどこでも荒らす基地害
どさ? ゆさ
gcc-4.5.2が入ってるディストリある?
DistroWatchで調べよう Gentooならなんとかしてくれると思ったら、やっぱりなんとかしてくれていた
自前でビルドすりゃいいじゃん
>>685 ありがとう調べてくるよ
Gentooでもまだチルダ付きなんだよね
>>686 最初から入ってるディストリが知りたかっただけだから
中身が新しめはfedoraじゃないかいな?
LFS
まだ問題抱えてないわけじゃないから、 4.4.Xと共存できるやつ選んだほうがいいよ。 その辺調べるより、/usr/localとか/optに自前で作る方が簡単だけどね。
http://distrowatch.com/search.php?pkg=gcc&pkgver=4.5.2 The following distributions include gcc version 4.5.2:
• AgiliaLinux: 8.0-beta2
• Arch Linux: current
• ArchBang Linux: 2011.02
• Ark Linux: dockyard
• AUSTRUMI: 2.3.0
• Debian GNU/Linux: unstable
• Frugalware Linux: current, 1.4
• Gentoo Linux: unstable, 11.0
• Linux From Scratch: unstable, 6.8
• Lunar Linux: moonbase
• Mageia: 1-alpha1
• Mandriva Linux: cooker
• PLD Linux Distribution: 3.0
• Slackware Linux: current
• Superb Mini Server: 1.5.6
• T2 SDE: snapshot
• VectorLinux: 7.0-beta1
• Zenwalk Linux: 7.0-rc3
安定版ならSlackwareとArchとFrugalwareか
>>690 知りたいだけって言ってるんだから使うんじゃないんだろう
使わないで知ることは出来ない
出来るだろ
cloogとの依存関係がむずかしくなちゃったね、4.6
(´・ω・) ClooG は isl or parma どっち使ったらええのん?
islでビルドでけた。ppl-legacyはこけた、RC
Current release series: GCC 4.6.0 (changes) とか公式に書いてあるから4.6が出たのかと思った
4.7が始まったから、4.6はまもなくでしょ
2.6.18-194.32.1.el5 x86_64 g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-48) g++でコンパイルしようとすると、socketとかbindとかの関数は通るんですけど、writeとかcloseがコンパイルエラーになります。 cppをcにしてgccでコンパイルすると通ります。 これはどういうことでしょうか。誰か教えてください。 まさかC++でソケット通信できないということじゃないですよね?
オーバーロードとか考えたけど、面倒なので再現するソースを見せてね
#include <stdio.h> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> int main() { // コンパイルエラーを試すだけなので第一引数はテキトーな値で write(0, "Hello World!", 12); return 0; } $g++ test.cpp -o test $gcc test.c -o test
>>702 ヘッダからみてもこれは C のプログラム。
>>703 そこはC風にやろうがC++風にやろうが関係ないんじゃないですか?
writeの使い方がおかしいのに、何言ってるんだか?
エラーメッセージを読まない、あるいは質問時に提示しない人間の頭の悪さが理解出来ない。
>>697 (´・ω・)情報ありお
ppl-legacy こけるのか・・・
取りあえず parma(0.16.1) でも build(gcc-4.6-20110318) 出来るのは確認した
エラーが出ますとだけ言ってエラーメッセージを書く知能がない奴にプログラミングは無理だろう
書けて、エラーが出たら、コンパイラが悪いとか言い出すみたいだけど、最近は
(´・ω・)う〜ん、cloog-parma(0.16.1) 怪しいかも・・・ しばらく?は isl にした方が良いのかなぁ ろしあの人もそうしてるみたいだし
writeなんて低レベルあんまり使わんななぁ。 ソケットでも send と recv だし。
>702 write()やclose()はunistd.hだったと思うんだ man 2 write man 2 close
>>712 ありがとうございます。コンパイル通りました。
RC2が出たね。
(´・ω・)そして、正式版に
CentOS5.5でも4.1.2なんだよなぁ。 なんでこんなに遅れるんだろう。
>>717 そりゃ .5だからだろう。 五回もマイナーリリースをしたバージョンだから基盤のバージョンは古い。
6.0で4.4になるよ。
>>720 いや いれればそれでいんだけど。
なんで古いままなのかなぁって。
>>716 最適化の強化がすげーな。今までとかなり違った結果が出そうだ。
>>721 > なんで
保守が原則の鳥だから。
遅れてるのではなくもともと新しいのは原則来ない。
Fedora->RHEL->CentOS
>>723 枯れ を好むって事ね。
確かに C/C++ コンパイルするのには
全然困らないね。
なんか、本質的な部分をわかってなさそう。 わからなくても使えれば構わないんだろうけど。
726 :
デフォルトの名無しさん :2011/03/31(木) 11:17:32.57
呼び出し規約について質問させてください。 gcc 3.4.5、MinGWを使ってコンパイルしています。 a.c/a.cpp int __cdecl test(int); int __stdcall test(int x) { return x }; b.c/b.cpp int __stdcall test(int); int __cdecl test(int x) { return x }; 上記のようなプログラムを作ってコンパイルしたところ、 a.c b.cでは予期通り error: conflicting types for 'test' というエラーが出てくれますが、a.cpp b.cpp はコンパイルが通ります。 -Wallを入れても警告が出ず、mapファイルを見ると 両方とも __stdcall になっているようです。これは何故でしょうか? また、これらで警告なりエラーなりを出させる方法はあるでしょうか?
c++だと、同じ名前でもコンパイルすると違う名前になるからでしょ
>>727 int __cdecl test(int x) { return x; }
int __stdcall test(int x) { return x * x; }
こんな事が出来るってこと?
試してないけど流石にコンパイルエラーじゃない?
そこまでは知らん。
extern C だっけをつけるんじゃあ
Win特有の話だから、詳しいことは知らないが、 config/**の#define TARGET_OS_CPP_BUILTINS()で builtin_defineされている。__attribute__に。 gccとg++で挙動が違うってことはないはず。 そもそもミスマッチな属性だし。
>>728 オーバーロードできるように引数のタイプを符号化して識別子に加えているとかなんとか
その辺の呼び出し規定はWindows側に合わせるのでは? cdecl, stdcall属性が付くと。
>>731 linuxでも__attribte__((fastcall))とか使うだろ。
もっともattributeは関数の宣言部でしか使えず、
定義部で付与してもエラーになるはずだから726のような状況にはならないけど
名前マングル
確かに両方共stdcallになっちゃってるよこれ
名前装飾とアセンブリ出力合ってねえ ダメだこれ
738 :
デフォルトの名無しさん :2011/04/04(月) 12:47:13.97
Linuxで/proc/statのcpuの各値を取得する関数はありませんか? /proc/statを文字列として読み込んで処理するしかないのでしょうか?
文字列解析が出来ないのかいな?
こういうのってマルチコアの排他ってどうしてるんだろうな。 /proc/stat読んでる間に書き換わったりしないのか?
syscall としては atomic に読んでる
ということは1バイトずつreadすると悲惨なことになるのか
ファイルポインタ新規作成して入れ替えてたら問題ないけど、実装みないと分からない
>>742 ユーザーランド側がどう処理してるかまではみてないけど,
kernel側はおおむねcopy_to_user()でbufferサイズ分一気にわたしてる
つか, デバドラ関係はドライバー依存だと思うが...
やたらサイズがでかくない限りは一気に呼んだ方が安全だと思うよ
>>740 もう一回読んで diff 取ってるんじゃね?w
まぁ、/proc/stat なんていい加減な値しか出ないからなw
収束するまで繰り返さないと
MinGWは、追加includeパスの設定はどうやればできますか。
このスレで聞いてるってことは、GCCを使うんだろ? GCCの追加includeパスの指定の仕方はわかってるんだよな?
-I
処理するファイルになんか書いとく・コマンドラインオプションの指定・環境変数の設定くらいしかできることはないだろ。さてどれだ。
754 :
750 :2011/04/15(金) 17:34:17.12
あらかじめ設定しておくのは出来ないんですか? MSVCやBCCは出来るんですが。設定ファイルがあります。
ありますよ
MSVCやBCCはIDE、GCCはそうじゃない。 ちなみにMSVCやBCCにも素のコンパイラ部分には追加パスの自動 解決機能はない。 IDEがコンパイル時やリンク時の追加パスを解決してくれてただけで GCCにはIDEの機能はない。 自分でmakefileを編集する能力がなければ自動生成してくれるIDEを 使いなさい。
bccはカレントディレクトリにcfgファイル置いといたら使ってくれるような IDEもプロジェクトの保存時にcfg吐いてくれるので、コマンドラインからも同じ設定でビルドできる
だから何?
BCCってBorlandのコマンドラインコンパイラ部分のことだと思ってたけど。 IDE込みならBCB。
msvc だったらclか
Borlandの場合はコマンドラインコンパイラの部分だけ別製品として 無償配布しているからIDEつきとで別の名前になってるけど VC++の場合は無償版でもIDEがついてるから特別な呼称はないはず。 Windows SDKに「Microsoft Visual C++ Compiler」という名前で付属してたり 「Microsoft Visual C++ Toolkit 2003」という名前で単体配布されてたりしたことはある
いまでもMicrosoft Visual C++ Compilerは、WindowsSDKに付いてるが。 IDEなしで。
GCCのIDEはEmacsでって言う奴が大半な気がする 俺はVimだけど
EclipseとかNetbeansとか重いからAnjutaとかGeanyで十分
ぽぽぽぽーん
>>756 bccは設定ファイルに指定できるし
vcは環境変数に指定できる。
お前が無知なだけ。
環境変数はともかく、設定ファイルに書くとはセンス悪いなあ。
だから、その設定ファイルはIDEが吐いてくれて、IDEからのビルドとコマンドラインからのビルドが 同じふうにできるようになってるんだよ IDE使わないなら-Iでいいじゃん
>>768 で「誰」がその設定ファイルや環境変数のセッティングをするの?
bccが設定ファイルに「書いてから、また、読む」とか?
vcが環境変数を「設定してから、また、読み取る」とか?
確かに「無知」は「お前だけ」だなwww
小学生?
>>771 は頭が悪いのか使ったこともないのに偉そうにしてるのか
インストーラやIDEに決まってるだろ
もちろんコマンドラインからしか使わないぜって人はそれらの機構は無視すればいい
ていうか、必要があれば自分でやるに決まってるでしょ。 IDEしか使わない人はIDE上でしか設定しないし コマンドラインを使ったことがない人は、 「誰が設定するの?」と書き込んで、心中では 「へへー、俺って鋭い指摘してるな、エヘン」と思っているのかもしれないね。 ていうか、gccのスレにIDEしか使わない人が来ているのが不思議。 使わない、じゃなくて使えない、なのかもしれないけど。
>>771 で、何が無知で、無知がどうしたって?
>>756 >ちなみにMSVCやBCCにも素のコンパイラ部分には追加パスの自動
>解決機能はない。
>>775 日本語が理解できないらしいな。
> 素のコンパイラ部分には追加パスの自動解決機能はない。
で、どこに「自動解決機能」があるってか?
778 :
デフォルトの名無しさん :2011/04/16(土) 22:21:41.93
マニュアル調べても分からんから駄目元で質問 リンカスクリプトをいじってるとうまくいかなくてはまることが多いんだけど エラーチェックが弱いんじゃないかと。 リンカスクリプトのチェックを強力にするオプションはないかね。 例えば、 SECTIONS { hoge : { aaaa.o(.hoge) } > foo } aaaa.oに.hogeセクションが無い場合でもエラーにならないけど、エラーにして欲しい。
まともなリンカーはエラーにはしないでしょうに...
これをエラーにするとまともなリンカじゃないの?何故?
>>779
素人向きの機能? リンカーの吐くマップファイルみりゃわかるでしょ リンカーに頼るより、コンパイルする時に気をつければいいのでは
Macでそのままconfigureしてmakeしたら -archオプション認識しない罠 複数ターゲットのクロスコンパイラとしてconfigureしないと ユニバーサルバイナリ作れないのか・・・? --targetに何か指定すればいいの? 教えてエライ人!
crosstool-NG使う?
>>778 面倒だから試してないけど、こんなんでどうか?
hoge :
{
__before_hoge__ = .;
aaaa.o(.hoge)
__after_hoge__ = .;
} > foo
ASSERT(__after_hoge__ - __before_hoge__, ".hoge not found in aaaa.o");
コンパイルするときに気をつけろってのは愚の骨頂
セクションの書き方がなんとなく...
>>783 それヒントにググってたら
MacPortsでもインスコできるようなのでそれでやってみたけど
+universalつけても無理だた・・・
man gccをよく読んでみたら、
「FSF GCCはfatオブジェクトファイルを作らない、つまり、単一アーキテクチャに対するオブジェクトファイルを作る
AppleのGCCは-archオプションが複数指定されたらfatファイルを作る」
と書かれていたので、Apple自体が提供するGCCじゃないと-archはないのね
-m32でi386、-m64でx86_64でコンパイルする事自体はできるので
別々にビルドしてlipoで繋げないといけないのか・・・めどい
gccはGPLなんだからアップルがパッチないしは修正gccのソースを出してるはずだろう。 それ見て該当する変更を自分で加えればいいんじゃないか。
4.2からずっと出てないし そう単純な変更じゃなさそうなのでもういいよ Makefileいじって両方出力する方が早そうだ
AppleはGPL3不全症なのでClangに期待するしかなさげ。
いずれそうなるだろ Appleだけじゃなく*BSD系全部
BSD厨とマカの異常さは特筆に価する *tsuribari*
でもclangがgcc並になるのは10年くらいかかりそうだな
まずはpccに移行してるみたいね。
>>788 そだね。
>>788 lipoつーのもコマンドラインから使えたりしない?
だったら完全自動化もできそう
>>786 -march= 所与の CPU 用のコードを生成する
>>784 サンキュー
なるほど参考になります。
一旦完成したldスクリプト/makefileを間違って編集しないためには最適だね。
でもゴリゴリ編集してる間は手抜きしてASSERTせずにはまりそう。
-Wみたいに強制的にチェックするウマい話はないみたいっすね…
そんな使い方せんにゃらんとは?
組み込みやっててハードの方もまだ開発中とかだと稀によくある
妖しいやり方でもしてんのかあ
むしろ編集してる間こそASSERT重要
COBOL触ってたときに、assert好きな人がいたな。 mesaの人もassertが好きみたいだけど...
gccの中だと、assertよりすごいことやってるな
>>795 -m32 -march=i386
-m64 -march=x86_64
てな感じかな
MacPortsにおまかせしたのに
ppcが使えないのは時代か
別に要らないけど
ppcはarchが違うから、x86上で動かしたいなら クロスビルド出来る環境を用意しないと
ハード開発中かどうか関係あるのか?
プログラマに必要なのは想像力だぞ
常識で考えてる人が多いよ。
>>806 SDRAMがちゃんと動かなくって、仕方なく内蔵RAMに配置するとか
CSの配線が間違ってて、違う領域にマップされてたとか
まあ、PCしか触らなきゃLDなんて無縁だろうな
昔はよく書いたけどなあ
アドレス代わっても.hogeセクションはなくならないし、
>>778 は別の理由じゃないか?
エラーチェックの話だろ。視野が狭いな そんなんじゃタダのコーダになっちまうぞ
一般的なエラーチェックなら、ハード開発中は別段関係ない。
うん。 例えばhogeセクションの綴りを間違えてるケースも考えられる。 fooがもっと複雑で、aaaa.o以外のモジュールも含まれてて、 そのモジュールの間とかでカレントアドレス(".")を使ってラベル定義してたりすると ラベルのアドレスが意図と違うから、全然関係ない箇所でリンクエラー出したりする。 根本原因でエラーを表示して欲しいというのは当然のこと
一つの.oに閉じている事なら、リンカ使わなくてもチェックできるし、 またその方がいいだろうしね。
gccを使っていて、共有ライブラリを作ってある関数を公開したのですが、 うまく公開できずに困っています。 以下のようなオプションを付ければいいと分かったのですが、 -Wl,--version-script,libfoo.map 実際に実行すると以下のようなエラーが出てしまいます。 /usr/bin/ld:libfoo.map:3: syntax error in VERSION script libfoo.mapは以下の通りです。 { global: foofunc; local: *; }; libfoo.mapをどのように修正したらよいのでしょうか?
>>817 自己解決しました。
実際のlibfoo.mapは以下の通りでした。
{
global: foofunc0;
global: foofunc1;
global: foofunc2;
local: *;
};
以下のように修正したところ問題なく動作するようになりました。
{
global: foofunc0;
foofunc1;
foofunc2;
local: *;
};
お騒がせいたしました。
cygwin の gcc-3 (GCC) 3.4.4 を使って 猫でもわかるの最初のサンプルを文字コードをutf8 の ファイル名 foo.cpp で保存して gcc-3 -mwindows -foo.cpp してできたファイルを実行させるとタイトルが文字化けするんですが ファイルの文字コードを sjis にすると文字化けせずに表示できました。 日本語以外の文字も使いたいので utf8 のまま、 出力を文字化けさせずにするにはどうすれば良いですか?
コンソール画面の文字コードがsjisなんじゃないの?
A系のAPIにutf8渡してどーする?
--input-charset=utf-8 --exec-charset=shift-jis とかそんな感じじゃない?
823 :
819 :2011/05/05(木) 09:42:56.74
cygwinのmingw系はlibiconv使わないようになってたような
>>823 NKFをインストールして foo | nkf -w とするのが簡単かと。
827 :
819 :2011/05/06(金) 05:25:56.04
からかってる云々はnkfについてだから君は気にしなくていい
829 :
デフォルトの名無しさん :2011/05/11(水) 17:30:40.70
gccで音楽ファイルを再生するにはどうしたらいいでしょうか? そのようなコマンドはありますでしょうか?
プログラム書け
音の処理はOSによって違う
取り敢えずphonon使っておけばいい
gcc 4.6.0 を binutils と一緒にビルドしてみたら -flto 使ってリンクするとき collect2: 'ld' が見つかりません といわれて失敗するようになった。 -flto 使わなければ普通にリンクできるし、 システムの binutils を使ってるときも大丈夫だったのに…… わけわからん
-vつけてどこで失敗してるのかもうちょっと調べてみりゃいいじゃん
普段自前でビルドしたりしない初心者なんですが、gccをビルドする手順をアホかってくらい丁寧に載せているページに心当たりありませんか? 上手く出来ずに丸一日潰してしまいました・・・
ビルドする環境とarchで検索してみな
ホームにinstallとかやったことないなあ OSは?GCCのVerは?x86_64?
Ubuntu 10.04で32bit環境でgcc4.4.3です
64bitOS入れればいいじゃん 32bitで64bitの環境を作るのは苦行かも
>>837 > home/myname/usr/g++ test.cpp などとやってもコンパイルできません
どう失敗するのか書けよw
./configure --prefix=/home/myname/g++ とか
./configure --prefix=/usr/local/g++ とか
./configure --prefix=/opt/g++ とかすれば、普通にインストール出来るだろ。
> 現状のバージョンからビルドしたバージョンに置き換えるにはどうしたらいいでしょう・・・
置き換えはやらないほうがいいね。
併存させた方がいい。置き換える程の知識はないでしょ。
自前の使いたければ、
PATH=/home/myname/g++:$PATH
すればいいだけだし。
>>841 そういえば書いてませんでした情報の小出し済みません;;
>error trying to exec 'cc1plus': execvp: No such file or directory error:
的なエラー文でした
再ビルドが終わったら指摘していただいた方法を試してみます
EeePCとはいえビルドに6時間とか
cc1plusの起き場所は実行時に"built-in specs"を参照してるんだけど、 gccをコンパイル時に想定されたところと違うところに置くとそうなる。 --prefixで指定した場所にインストールできてるの?
>>841 < PATH=/home/myname/g++/bin:$PATH
フルパスで起動すると失敗する。(PATHが通ってればうまくいくかも) そういう時はgccをモゴモゴするしか
gccをモフモフしたいです!!
パフパフ出来れば最高かも
ほむほむしたいです。
>>845 > フルパスで起動すると失敗する。(PATHが通ってればうまくいくかも)
関係ない。cc1plusはもともと$PATHとは無縁なところにある。
悪い、失敗するのはcmd.exe上だった
--prefixと違うところに放り込むと失敗するだったかな
>>834 調べてみた。自前の collect2 に -plugin オプションを指定すると
ld を見つけられなくなるらしい…どうしてだろう
○自前の collect2
[name@localhost toys]$ /home/name/usr/gcc/libexec/gcc/x86_64-unknown-linux-gnu/4.6.0/collect2 \
-plugin \
/home/name/usr/gcc/libexec/gcc/x86_64-unknown-linux-gnu/4.6.0/liblto_plugin.so
collect2: 'ld' が見つかりません
○システムの collect2
[name@localhost toys]$ /usr/libexec/gcc/x86_64-redhat-linux/4.1.2/collect2 \
-plugin \
/home/name/usr/gcc/libexec/gcc/x86_64-unknown-linux-gnu/4.6.0/liblto_plugin.so
/home/name/usr/gcc/bin/ld: no input files
collect2: ld はステータス 1 で終了しました
PEX_SEARCH辺りの設定がシステムのと違ってるんじゃないか。 /home/name/usr/gcc/binをPATHにくわえても駄目なの?
gcc -print-prog-name=ld
strace
>>855 strace で見てみたら、
自前の collect2 は ld ではなく ld-new という名前を検索してた。
ln -s ld ld-new
でうまくいくようになった。(何故 ld-new なのかはわからないけど)
みんなありがとう。
それって肝心のltoは効いてないんじゃないの?
ldは少々古くてもltoは効く。
859 :
856 :2011/05/22(日) 17:31:59.67
ld は自前の ld だよ。だから古くない。 gcc a.c -> 自前の ld を呼ぶ gcc a.c -flto -> 自前の ld-new を呼ぶ (ld-new は存在しない) という状況だった。だから自前の ld のそばに ld-new を作ってみたらうまくいった。 lto のプラグイン自体は存在するし呼び出されている。
gcc -v 晒してよ
[name@localhost ~]$ gcc -v 組み込み spec を使用しています。 COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/home/name/usr/gcc/libexec/gcc/x86_64-unknown-linux-gnu/4.6.0/lto-wrapper ターゲット: x86_64-unknown-linux-gnu configure 設定: /home/name/usr/src/gcc/gcc-4.6.0/configure --prefix=/home/name/usr/gcc --enable-languages=c,c++,fortran --disable-multilib --enable-lto スレッドモデル: posix gcc バージョン 4.6.0 (GCC) configure する前に gmp/ mpc/ mpfr/ と binutils-2.21/ から bfd/ binutils/ etc/ gas/ gold/ gprof/ ld/ opcodes/ を gcc-4.6.0/ の下にリンクしてある。
binutilsのinstallの仕方がおかしいような?
ld-newってのはbootstrapで使うから、 buildに失敗してるんだろうね。
gccのconfigureの時にld-newが検索に引っかかったような?
>>862 おかしい?
http://gcc.gnu.org/install/download.html に従ってやってるつもりなんだけど
>>863 ,864
ルートディレクトリの下を全検索したら、
(↓/home/name/usr/src/gcc/build はビルド用のディレクトリ)
/home/name/usr/src/gcc/build/ld/ld-new
/home/name/usr/src/gcc/build/stage1-ld/ld-new
/home/name/usr/src/gcc/build/prev-ld/ld-new
が確かに見つかった。
え、binutilsをビルドしたところで make install やってないの?
>>866 そりゃあ、binutils のディレクトリで make してるわけじゃないし。
ただソースにリンク張って、gcc のトップディレクトリで make && make install しただけ。
不味いの?
すまん。 ×gcc のトップディレクトリで ×gcc のトップディレクトリを別のディレクトリで configure して あとビルドの残骸で残ってた ld-new と、インストールされた ld のハッシュ値は同じだった。
binutilsとgccを一緒にビルドするとかやったことない、自分は binutilsとgccを別々にビルドして --prefixを合わせて make install を個別にやれば、はまらないような?
そりゃそうよ。
bootstrapの時に新しい奴を確実に使うためのファイル名。
bootstrap終わったら消される。
>>867 指示通りに出来てなかったんだろうね。
別々にするのが無難かなあ。やっぱり。 特に問題なく動いてるし、もういじるの面倒だ。 次のリリースが出たら、今度は別々にビルドしてみるよ。
むしろ一緒にビルドする人初めて見たレベル
それ、書きたかった
binutilsのバージョン上げる必要ないでしょ?
まあ実際にバグかもしれないな んなけったいな入れ方しつつ、LTO使う人がいないせいで表面化しなかっただけかもしれない
>>874 c++0x の name mangling を解読できる c++filt が欲しかったんだよ。
後はおまけ。
で、name mangling なんてコンパイラ固有なんだから
c++filt が gcc と関係ない binutils に入ってて大丈夫なのか?と想像をしていたら、
>>865 に「一緒にビルドできるよ」と書いてあった。
だからその通りやったわけよ。
877 :
デフォルトの名無しさん :2011/06/17(金) 21:06:25.37
キーボードの矢印キーが押されたかどうかを判定する関数はありますでしょうか? linuxで、c言語です
GUI or CUI?
879 :
デフォルトの名無しさん :2011/06/17(金) 21:11:38.87
stdinのバッファリング切って、読んだキャラクター列が↓かどうか調べる。 ちなみに↑↓→←と押した。 $ hexdump -C ^[[A^[[B^[[C^[[D 00000000 1b 5b 41 1b 5b 42 1b 5b 43 1b 5b 44 0a |.[A.[B.[C.[D.| 0000000d
ncurses使うんじゃないの?
ncursesを作る話だな
gcc4.6.1RCリリース 順調にいけば来週早々にも正式版がでる予定
GCC 4.6.1
885 :
デフォルトの名無しさん :2011/06/29(水) 01:49:38.82
システムに入ってるgccが古すぎるがアップデートしてもらえないので、 自分で--prefixを指定してコンパイルし、ホーム以下に gcc を入れました。 それでコンパイルは出来たのですが、実行時に共有ライブラリがうまくリンクされません。 LD_LIBRARY_PATHを設定するラッパーを用意する以外で良い方法はありませんか? root権限なしで出来る方法でお願いします。 あと -static はスレッド(ちなみにLinux)まわりが不整合になるので不可です。
ライブラリの置き場所はホームに固定でいいってこと? それならリンカに-Lオプションでいいんじゃない?
symlink?
888 :
885 :2011/06/29(水) 07:54:30.81
一晩寝てからドキュメントをあさり
リンク時に LD_RUN_PATH を設定するか -Wl,-rpath=/hoge を指定することで
バイナリのDT_RUNPATHタグに記録され実行時に利用される、
というので、とりあえず共有ライブラリがリンクされるようになりました。
この方法であってるでしょうか?
>>886 Linuxではリンカの-Lオプションはバイナリに渡されないようです。
でもドキュメント探すときのヒントになりました。
ありがとうございます。
template<int> struct Example; template<> struct Example<2> { template<class> static void StaticMethod(int) { } }; template<> struct Example<3> { template<int> void Method(int) { Extern<2>::StaticMethod<int>(10); } }; どのバージョンか解からんが、去年ぐらいのバージョンで こんな感じのコードをコンパイルしようとしたら、StaticMethod<int>が 比較演算子とシンボルに分解されてコンパイルエラーになってた。 いつ頃のバージョンで治ったのか知ってる人いる?
2011年になっても未だにJAVA使い続けてる奴ってさ 仕事で仕方なくならわかるけど 家でもJAVAやってるなら本当にバカだよね。哀れ お前たちは本当にゴミだな
891 :
デフォルトの名無しさん :2011/07/04(月) 19:30:58.06
>>885 あと -static はスレッド(ちなみにLinux)まわりが不整合になるので不可です。
それってどんな現象がおきるのですか?
gdb を使って任意の行にブレイクポイント設定しつつ プロンプト表示させずに 即プログラムをデバッグ実行させるにはどうしたらいいでしょうか イメージとしては、GUIのデバッガと同じようなことがしたいのですが (ブレイク後値参照とかいった複雑?なことはしません)
そうではなくて、 ちょっとした便利ツールを作りたいのです
>>892 できるのか知らんけど、パイプからコマンド流し込めないの?
ソケットかlispですか lisp love な教授がいたけど、 まったく共感出来なかったですね… gdb server で進めていこうと思います ありがとうございました
lispはコードを参考にすればいいだけ。 ちょっと読めば、すぐにpty使ってるのが分る。
gcc 4.6 の、intel CPU への最適化って、どのくらいパフォーマンス上がりました?
いつと比べてだよ 試せよ ダダなんだから
>>900 誰か試してる奴が居たら、聞きたいじゃん。
うちではあまり効果無かった…。
-Ofastとかしたの? LTOも試してみた? 関数に最適化を助けるattribute付けてみた?
-march=nativeでおk
>>902 -Ofast -march=native でやってみたけど、gcc 4.4 の吐くバイナリと速度は変わらなかったわ。
ソフトウエアに激しく依存するだろうから参考にもならないだろうけど、
ちょっと他の人の感想が聞きたかったんだよ。ごめんな。
905 :
デフォルトの名無しさん :2011/07/30(土) 23:51:06.32
COMのIDispatchを書くのがめんどくさいんで、タイプライブラリから生成したいんだけど、 そもそもGCCでタイプライブラリをどうやったら作れるのか解からん。 IDLに相当するようなもんってツールチェインにあるの?
906 :
デフォルトの名無しさん :2011/08/17(水) 20:56:26.54
どうせ並列CPU持ってないと意味無いんだろ。
908 :
デフォルトの名無しさん :2011/08/21(日) 10:21:17.18
gcc 4.6で、4.5まで作られてた例外テーブルの (関数名).eh ってラベルが作られなくなったせいか、 Macでのldの-dead_stripで.eh_frameセクションごと丸ごとstripされてしまって例外が受け取れなくなってないか? ELFターゲットの--gc-sectionsのほうは大丈夫だった。 俺まだLeopardなんで買い換えろボケって話かもしれないんで、誰かLionで試してはくれまいか。
--strip-debug?
910 :
デフォルトの名無しさん :2011/08/21(日) 18:45:23.03
いやいや-dead_stripは-dead_strip。使われてないシンボルを削除するもので 動作自体はGNU ldの--gc-sectionsそのもの。 Appleのldだとオプションが違うのよ。
ldでstripしたことないな stripはstripでやってみたら
912 :
デフォルトの名無しさん :2011/08/21(日) 18:57:41.89
だからstripじゃ無いんだよ。--gc-sectionsなんだよ。 効果は、どこからも参照されてないシンボルを「コードごと」実行ファイルから取り除くもので stripにはこんな機能ないよ。Windows系のリンカで言うところのスマートリンクだよ。
914 :
デフォルトの名無しさん :2011/08/22(月) 19:33:55.81
ですです。 最初フロントエンドの問題かもと思ったけど、4.6.x全部でフロントエンド問わず発生するんで gcc全般について話せるところのほうがいいだろうと。とくれば英語苦手なんでこっちに来た。 Simonさんに試してもらった範囲ではLionでは起きないってことで 今はldのバージョンとの組み合わせ問題かなあ?と思ってるところ。 条件がはっきりしたらgccのbugzillaに投げるから、誰か協力してくれない?
gnatかいな?
916 :
デフォルトの名無しさん :2011/08/22(月) 21:40:28.53
だからフロントエンド問わないって C言語の-fexceptionsモードでも再現するよ
918 :
デフォルトの名無しさん :2011/08/22(月) 22:35:38.49
あー、動いてますね……。 確認方法はそれでいいです。 やっぱ単にいつまでもLeopardにしがみついてないで買い換えろボケって話か……orz
一応Leopardのldの何がまずいかを詳しく書いておくと、__eh_frameって例外情報のセクションが 「-dead_strip」使用、かつ「(関数名).ehってラベルを持っていないとき」限定で、リンクされない(実行ファイルから除かれてしまう) gcc 4.5までは (関数名).eh ってラベルが生成されてたんだけど、4.6から生成されなくなった。 セクションの有無はsize -mか、GNU binutilsを入れているならobjdumpで確認可能、参考まで。 バグレポートするかどうか悩む……。 あとsage忘れに気付いたごめんなさい。
objdumpは標準入力からデータを受けとるようなことは出来ますか? 見た感じファイルから読み込まなければならないような作りに見えますが
cat a.out |objdump -d これで普通に出たけど
それ,objdumpがobjfileを指定されていないときにデフォルトでa.outを読むから
本当だ ソース見る限り方法はなさそう if (optind == argc) display_file ("a.out", target); else for (; optind < argc;) display_file (argv[optind++], target);
windowsじゃバイナリが読めないからじゃね
/dev/stdin指定しときゃよくね?
objdump -d /dev/stdin < foo 言われてみると確かにそうだが よく気づいたな
objdump -d /dev/stdin <a.out だと動いたけど cat a.out | objdump -d /dev/stdin だとだめだ
どうしてもパイプ使いたくて特定のシェル(例:bash)なら↓でどうだろうか? objdump -d <(cat a.out)
>>920 ありがとう、でも/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への移行も睨んで)。
>>928 objdumpはファイル記述子0(stdin)を
そのまま使うということが出来ない実行ファイル。
常にパスをopen(2)しないといけない。
/dev/stdinはopend(2)でファイル記述子0を扱うための仕掛け。
|を使うとopen(2)でなく、shellがpipe(2)でパイプを作成し、
右辺コマンドのファイル記述子0としてから、objdumpを起動する。
しかし、objdumpはファイル記述子0を扱えない。
>>929 結局はパイプなので駄目。単なる構文糖衣。
ちなみに最初期のシェルはそういう文法(ただし括弧なし)だった。
>>930 その辺がOS独自拡張の怖いところだよね。
>>933 この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
>>936 あらら、ご丁寧にそんなチェックが入るのか、残念。
復帰
939 :
デフォルトの名無しさん :2011/08/27(土) 05:23:21.81
SSEでベクトル化しやすいような、配列の合計を求めるコードを教えてください。
その質問しかたで答えられる人がいると思うの?
本人なら答えられるはず
自分で質問して自分で答えると。
2ch では良くあること おまいらも見に覚えがあるだろ
× 見に覚え(Google mozc) ○ 身に覚え(Anthy,Canna)
>>939 float32 sum=0;
for(int i=0;i<N;i++) sum += array[i];
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 を使うにはなにか他に入れる必要があるのでしょうか?
牧原あゆちゃんの画像もっとくれ
エラーメッセージを読みなよ 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> にしてもエラーがでます。???わかんない
std::
error: 'cout' was not declared in this scope エラー:このスコープの中では 'cout' は宣言されていない ??
うしんg なめさpせ std; を入れるのだ
C++勉強し直したら?
using namesapse std; ??どこに入れるんですか?
C++って、文法変わった?
>>950 これだけで分かる人はそんな質問しないと思うwww
>>946 のコードは『はじめてのC++』という本に載ってるんです。
おまえにはgccはまだはやい
たまには親切に #include <iostream> using namespace std; int main(){ cout <<"やっほー"<<endl; eturn 0; }
>>960 通りました。gcc3 でも、gcc4 でも。
gcc4 では文法が厳しくなった?のでしょうか・・・
>>959 そうですね、捨てます。
いいC++の本があったら教えてもらえませんか?
>>961 マジレスすると
>>946 は C++ のコードとして誤っていると言える。
なので gcc4 が厳しくなったと言うよりは、それより前が緩かった。
(gcc3 でもコンパイル時に -std=c++98 オプションを付けると
>>946 はエラーになるんじゃないかな。 確認してないけど。)
gcc3 -std=c++98 としても、
>>946 のコードはワーニングはでますが、通りました。
wiki を見ると、C++はここ数年仕様に追加がされてるみたいですね。。。。
最新の本を探してみます。ありがとうございました。
仕様追加とか関係なく、その本が仕様に準拠してないだけ。
965 :
デフォルトの名無しさん :2011/08/30(火) 22:42:51.16
_〈_( o_ノ☆'.....i ....ヽ.............\ ィ-、 ぐ,n(_乂..!.::::::i:::|::::i:::|:::::::i:::ヽ:::ヽ / / ィ-、尤o う::::;;|斗イ::ハ斗亠',斗ト、:i::::::} / / / /7(乂):::::| ,ィzz\ ,イ芯ヾレ!::::::! / / / / |:{ノ☆::::!{弋zリ ¨´≠彡'リ _/⌒ヽノ / |::::::::::ハ::{ ≠ ' } r‐、 ,‐、 /ー、\| /ヘ / ∠::::::::::::トミゝ {ニニニィ ,! | | / / \ \八 〉' 彡ノリ ∨ } ,イ | | / / | リ j/ー个:.、 ゙こ三/ / | |__/ /-‐、 ィムムト、_. ヽ、こ,. イ)、 | /〉〈ノハ
発売日でみるにC++98制定前/制定後だがC++98完全準拠でないコンパイラも多々あった頃の状況にあわせた本なんじゃないか 規格解説書でなく実用入門書なら規格よりも当時主流のコンパイル実装に沿った内容の本もありえる(・・・)
で、現在の規格に準拠した本ってどれなんですか?
入門書に良書なし、金出すのはもったいない、webで済ませろ
入門書でなくてもいいです。これは定番でしょ、みたいな本があれば教えてください。1万以上でも構いません。
定石本ってのはないと思うよ 地道に積み上げるの吉かと
C++Primer
ume
うめ
もも
>>970 出版も今年だし、著者のストラウストラップがISO C++標準化委員会のメンバーっていうのもいいですね。
1000頁を超えるとなると、少々ビビリますが、検討してみます。ありがとうございました。
「学問に王道なし」と言う言葉もある。 押さえといた方がいい本というのはあるけど、それだけ読めば充分というような本は無いし、当人の資質によっても妥当な本は違う。 まぁ、 C++ は複雑すぎだよな。 俺としては C++03 で充分すぎると思う。
>>969 規格書
C++ In Depthシリーズ
最新ANSI C++オブジェクト指向プログラミング―エキスパートへの最短コース (Professional Programmers’ Books) (単行本) Paul Anderson (著), その他 ¥ 1,269 中古品 ¥ 13,923 ほぼ新品
最近のメジャーなC++コンパイラは1998年の規格にほぼ準拠している C++ Wikipedia
>>978 >>979 どちらも構文の説明にとどまらず、オブジェクトモデリングの話からクラス設計の指針にいたるまで、
網羅的に書かれているようですね。検討させて頂きます。ありがとうございました。
>>980 そのようですね。もうgcc3 は使われていないんですかね・・
>>981 gcc3 が規格に準拠していないというわけでなく、独自の拡張として古い書き方を許容してるんだよ。
オプション指定で厳密に規格に従うモードにすることもできるよ。
なめさpせ (またの名を namesapse) が流行らなくて残念だったなおい。
じえんおつ
namespace なめsぱcえ だろ。
SKK-IME だとローマ字として中途半端なのは変換されずに消えるから「なめぱえ」になった。
>>952 うしんg なめsぱせ std;
じゃなく、
うしんg std::cout;
うしんg std::cin;
を使うようにしろよ。
iostream.hは標準化前っすね まあそういう時代もあった
ume?
うんこ
995 :
デフォルトの名無しさん :2011/09/03(土) 14:00:10.85
,,,ムWwWwwWWww,,,, ミ川ミ川ミ三川ミミ川ミ三ミミ 彡"彡三ミ彡彡彡ミミ川ミ彡川彡 彡""`''~~~~"゛--、ミ三川三川彡 y、 ノム 彡ミ川ミ三川ミミ / 〈 ノ'''''' ⌒ 川ミ川ミリ三川ミ .l__ _ 川彡ミ川リ彡川ミ rl||l| i__ril|||llli 川ミ川川リミ川ミ ヽ_l_/ ヽ____ノ ̄ ̄ ̄川彡ミ ヽリ川川 (( __)、 川リ 6 ノノリ川川 |/ ̄ ヽ ノ川| 9 ´川川リ .|イミFゝ_,, / (((l 川リ川 (~^~√` 川 (川リ .|  ̄ ::;;; /~ヽ .ヽ|||ll___,,,,,ー"" / 人\ `入 / \
だから、日本のソフトウェア産業って、遅れてるんだな。
>>997 でもいい本ですよ。
読本として上級者も読みましょう。
原因と結果が逆じゃね? ソフトウェア産業全体が最先端を追い掛けないから、出版が遅れても許容されている。 最先端を追い掛けている極一部は原書を読むから、やはり出版の遅れは問題にならないし。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。