1 :
デフォルトの名無しさん :
2005/07/12(火) 14:38:43
宇宙一の開発ツール Delphi !!
3 :
デフォルトの名無しさん :2005/07/12(火) 15:16:13
4 :
デフォルトの名無しさん :2005/07/12(火) 15:18:16
r‐┐ r‐┐ r‐┐ |_|. __ .__| |__ .| | | ̄| | ̄!'´. `ヽ |__ __| | | | | |. .r"⌒ヽ .| | |. ___ | | | | | | | | | | ,r''" .`ヽ | | | | | | | | | !__i'. ,r"⌒ヽ i| | |_| |_| |_| !、___ _ ̄ ̄ __.,| ! !、 ̄ ̄,―, ゝ、_  ̄ _ノ  ̄ ̄ ∩∩ High performance and low price ∩ (7ヌ) (/ / / / ∧_∧ || / / ∧_∧ ∧_∧ _(´∀` ) ∧_∧ || \ \( ´∀`)―--( ´∀` ) ̄ ⌒ヽ(´∀` ) // \ /⌒ ⌒ ̄ヽ、Itanium/~⌒ ⌒ / | |ー、 / ̄| //`i Xeon / |Celeron| |Pentium/ (ミ ミ) | | | | | | / \ | | | | ) / /\ \| ヽ / ノ | / ヽ ヽ、_/) (\ ) ゝ | | | | / /| / レ \`ー ' | | /
犯罪者集団 ,,-‐''""''ー--,_ |""" "'|| Low performance, High price, ::::::::::::::::::::::::::: | Intel in the hell || Extreme Heat and Electricity !!! :::::::::::::::::::::::::::::::::: | Intelは逝ってる .|| ::::::::::::::::::::::::::::::::::::::::::::::: | ,ノ""""'|| ::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::: | ,/""" || :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::: """" .|| :::::::::::::::::::::::::::::::::::::::::::::::::: ./ ) ::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::: / /|| :∩::::::::::::::::::::::::::: / / ∧_∧ | | ( ( (´・ω・`)// /中\ \\. ∧_∧ ./Celeron ∧_∧( `ハ´) \ < `∀´ > n ∩ | 雑_音 (´Д`li)Itanium. ハ \. ( E) | | (@ε@) / '\ ノ |INяg/\ \_/./' | | ( ヽ, / ヽ、/ Xeon// ヽ, | ノ \__/ | | ∧_∧ \\/ ,/l D l ( ( ( \ノ i | i. ヽヽ( ゚Д ゚ ;) ヽ__,ノ .| HT | ヽ、ヽ、//ヽ、__ノ / / '\Pentium\
とりあえず、自作PC板逝け
馬鹿者が、俺の周りにはそんなCPU存在しとらん
ぶっとび!CPU
ううう
>>1 >史上最強かもしれないツール、GCC(GNU Compiler Collection)について語るスレ。
あ、前スレに俺が書いたテンプレのメッセージ変えやがった。
人類史上最強のツール、それが GCC。
res movsbじゃなくてrep movsbだったような気がするけど
15 :
デフォルトの名無しさん :2005/07/16(土) 17:15:50
まがいもののCPU使ってる奴はどっかいけよ
SPARC, MIPSのみが選ばれたCPUです。 次はAlpha
>>16 >>12 のサイトではSPARCは最悪の命令セットなんて言われとりますな。
GCCは、アーキテクチャを選ばないのだ。 other architecture's patch are welcome.
仮想マシンを作ってるんだけどアプリ開発のプラットフォームで行き詰って 自作アセンブラまでしか進めません。 GCCの移植を行う前にシンプルなCコンパイラが必要になってくるんでしょうか。 どういう道のりになるかわからないんだけど何かアドバイスもらえたら幸いです。
>>20 1. 既存のプラットフォームで動く、キミの仮想マシンをターゲットに
したgccを作る
2. 既存のプラットフォームで、1を使って仮想マシンで動く仮想マシン
をターゲットにしたgccを作る
gcc 4.0.1 がでましたね。 しかし、うちの Athlon64 3000+だと、3.4.3のほうが速いバイナリをはくんだけど、4.0の最適化を実感できた人、います?
8bit向けgccぷりーず
この中に 8bit arch って無かったっけ? alpha, arc, arm, avr, bfin, c4x, cris, fr30, frv, h8300, i386, i860, ia64, ip2k, iq2000, m32r, m68hc11, m68k, mcore, mips, mmix, mn10300, ns32k, pa, pdp11, rs6000, s390, sh, sparc, stormy16, v850, vax, xtensa
386には対応していても8086には対応していないくらいだから・・・ 16bitはGCC自体が動く環境ではない、とは言っても クロスコンパイラなら作れそうな気もするけど。
>>17 SPARCの魅力は、変態メモリアクセスモードにあります。
RMOはSPARCv9からだけど。PSOは前からあるし。
SPARCをこれから使うっていうアホな企業ってあるの?
ていうか Z80 のパッチぐらい簡単に作れるだろ。 パッチの作成は↓にまかせた。
avrが8bitぽい。 bit数よりも汎用レジスタがどんだけあるかのほうが重要かも。 avrはレジスタたくさんあるみたいだけど、ほとんど専用レジスタ しかないZ80用のmd書くのはとても辛そうだ。
30 :
デフォルトの名無しさん :2005/07/17(日) 18:19:34
プリプロセッサに#lineディレクティブを無視させるオプションてないんでしたっけ? いまどき珍しいcwebで書かれたらしいプログラム(元ソースはなし)のコンパイルが うまくいかないので調べているんだが、これのせいでどこでエラーになっているのか さっぱりわからん。
sedかなんかで全部削ってしまう方が早いだろ。
>>30 あのさ、 man も info も --help も source も見ないようでは GNU な世界で生きていけんぞ。
-P Do not generate #line directives
33 :
32 :2005/07/17(日) 20:51:14
>>30 げ、よく読んだらソースがねーのかよw。てゆーか、その文章意味わからんぞ。
プリプロセスしてるんでなくて、Cコンパイルしてるって事か?
なら
>>31 だな。
35 :
32 :2005/07/17(日) 21:00:53
>>34 だって、プリプロセスした物をもう一度プリプロセスさせるとは思わなかったんだもん。
ってゆーかクローズドですか。そうですか。
36 :
30 :2005/07/17(日) 22:43:45
>>33 ああスマソ。cwebからプリコンパイルしたらしいCソースがあるけど、このコンパイルが
通らないということです。
#lineディレクティブを解釈して__LINE__をいじるのはプリプロセッサじゃなくて
コンパイラの方なんですね。考えてみればそうか。
どちらにしてもgccにはそういうスイッチはないということで。
yaccで生成されたらしいソースが配布されているのはよく見るけど、それで
同じように困ったことがある人はいないんでしょうかねぇ。
>>33 webなんて知らない若造には意味がわからんわな。
gccって同一のリテラル文字列をまとめてくれたりするの? printf("hello"); puts("hello"); とか書いた時。
そのはず。
同一ソース内でならまとめてくれる。 ただし "hello" と "llo" みたいな部分一致はまとめてくれないようだ→xstr使おう
-fmerge-constants
うへ。gcc -S でチェックしたんだけど、merge-constants って ld レベルでもやるのか。 知らんかった。
C++以降、ld(collect)さんは仕事多いですよね。
C++は最適化を含む下のレイヤが賢く処理すれば万事OKさって 面倒なことを無責任に増やしまくる方向に走ったからなあ。
MIPSのアセンブラやリンカも命令勝手に最適化してたなぁ
MIPSはそれやってもらわないと速度が出な…
x86_64で-fschedule-insnsが…
つづきを
デフォで無効、-O2 -fschedule-insnsとかやると…
つづきを
お前の後ろに-fschedule-insnsが…
unable to find a register to spill in class なんたらってエラーを…
つづきを
吐いて止まる事が、止まらない時はいいコード吐いてるのに…
56 :
デフォルトの名無しさん :2005/07/25(月) 14:02:13
gcc4.0.1になってから、作成したプログラムを&をつけて実行しても、ログアウト時に同時に終了してしまいます。 4.0.0の時は問題ありませんでした。何が問題なのでしょう?
nohup
58 :
デフォルトの名無しさん :2005/07/25(月) 15:46:56
>>57 ありがとうございます。4.0.1からなにか変更になったのですか?リリースノートを見てもわからなかったのですが。
いや、普通そういう時は nohup つけて実行するもんなんじゃないの?
shellか、shellの設定が変ったんじゃないの?
61 :
デフォルトの名無しさん :2005/07/27(水) 16:09:30
bashです。nohupをつけて実行すればうまくいきましたが、優先度が5下がってしまいます。 root権限がないので、実行後優先度を上げられません。nohupを使用時に、優先度を0で実行できないものでしょうか?
disownしてからログアウトしてる?
gccを知ってても〜 それだけーじゃ 困ります〜
ていうか、スレ違いだろ
67 :
デフォルトの名無しさん :2005/07/29(金) 14:40:53
myrand(int a, int b); a〜bまでの乱数を作りたいです
int myrand(int a, int b){ return random(b - a) + a; }
int myrand(int a, int b){ srand(time(0)); return random(b - a + 1) + a; } では?
>>69 毎回系列を更新すると、乱数の質が果てしなく悪くなる。
つーか、1秒以内に一回しか呼べない関数かよ。
(笑)
Windresの--languageオプションの使い方がわからないんだけど。 詳細な解説してるところが見つからない。 本家じゃ--languageオプションつかっても日本語は通らないの?
-languageはまともに対応してなかったとオモタ というか *.rc に utf8 で直接書けば日本語使えたような。
-languageはencodingとは直接関係ない。リソースの言語指定。 Windowsインストールしたときの言語指定と同じ。 表示メッセージの切り替えなどに使う。
gcc.gnu.org dj?
今は見れる。
ヘッダファイル中で typedef struct argfoo argfoo; struct argfoo{ int data; argfoo *next; }; ってな風にやってるんだけど argfooを使う*.cファイルで c:6: error: `argfoo' undeclared (first use in this function) c:6: error: (Each undeclared identifier is reported only once c:6: error: for each function it appears in.) ってなコンパイルエラーが出て困っています。 きちんとヘッダファイルはインクルードしています。 struct argfoo{ int data; struct argfoo *next; }; 関数に引数渡すときに一文がやたら長くなるので こんなふうにはしたくないんですが・・・
80 :
79 :2005/08/06(土) 11:42:14
自己解決しました。 途中で構造体って事を示すm_ってのを[argfoo]の前に追加してたんだけど ソースコード全てを変更していなかったみたい そこの部分でエラーになってた 心配してくれたプログラマの皆さんご迷惑をおかけしました。
どうでもいいが m_ で構造体を示すってかなり珍しくないか
m_ は member の頭文字として、 struct argfoo { int m_data; struct argfoo * m_next; }; にするのが一般的だな。
構造体の場合は一般的じゃないと思うが...。 それに、クラスメンバでも _ を最後につけるタイプの人もそれなりにいる。
>>83 m_ の使い方の話をしてるんであって、メンバの変数名の話をしてるんじゃない。
よく文盲って言われない?
85 :
81 :2005/08/06(土) 17:35:41
構造体の命名法の話をしてたのに m_ の使い方の話に持っていった方も 同類だと思うが。 自分の想定外の話の仕方が嫌ならブログでも書いとれ。
GCCについて
がべーじこれくたーこれくしょん?
ここは自他境界の曖昧なインターネットですね
ガンダムチョットコケテネー
なんでアクシズを落とそうとしたんだっけ
いわゆる「核の冬」で地上を寒冷化させて地上の人類を滅ぼすため
数十億の人間を宇宙に上げる技術力があるんだから ぶっちゃけそんな塵くらいなんとかなりそうな気がする
昔ユカタン半島に落ちた隕石が 氷河期を起こして恐竜を絶滅させたってのの再現を狙ったわけだな。 核は関係ないと思うけど。
ガンダムが巨大な掃除機を持ちながら空中の塵を掃除する姿を想像しました。 その掃除機を制御するプログラムをGCC内の言語で書くならどれがいいですか? C? C++? ObjectiveC?
>>99 Javaじゃないか?
掃除機だけにな! ウェーハッハッハ
D という手も。
Adaのことも思い出してあげてください。
ガベージコレクション
じゃばじゃば吸うとでもいいたかったのだろう
風呂釜の掃除か。
只今より GCC=Gundam Cosmo Cleaner 要はガンダム+ヤマト
掃除機を振り回すガンダムじゃなくて、 ガンダムが使う掃除機の制御プログラムだろ? 何でもいいんじゃないか。 ガンダムの方の制御なら今のGCCにはない言語がそのころのGCCには入っているに 違いない。
ガンダムの制御はアセンブリで出来るよな?
サイコみゅとかは思考制御じゃよ gccだとコンパイルできない
鉄人28号を動かす正太郎君の手の動きだって、gccだとコンパイルできない。 制御プログラムはその先の問題だろ。
なぁ、ここってもしかて荒されてるのか?
フリーソフトだからね
自分の思い通りのレスが無ければ即荒らし扱いか・・・ GNUが誤解されるからそういう思想は捨ててください。 お願いします。
はいはい
>>112 最近妙につまんない話題多いから、そう思うのもむりはない。
117 :
デフォルトの名無しさん :2005/08/10(水) 14:58:55
コンパイル時のオプションのデフォルトを指定するにはどうすればよいのでしょうか?
make: 循環 118 <- 118 依存関係が破棄されました。
gccで、各architectureのメンテナって全て決まってるの? もし決まってるのならそれってどこかに書いてありますか?
>>121 隊長!!それってメンテナじゃなくて、貢献者のリストだと思います!
隊長!!gccで受け入れ難いバグを発見した時の怒りは、どこにぶつけたらよいのでしょうか?
>>125 patchを作って呪詛とともにメンテナに送りつける。
隊長!!gccプロジェクトは各アーキテクチャごとに、もっとregression testをした方がいいと思いますっ! 彼らはきっと脳内コンパイルしかしてないと思いますっっ!! 実機でコンパイルしてないと思いますっっっ!!!
2進パッチをみんなで送りつけるプロジェクト
>>127 該当アーキテクチャのマシンを買ってビールとともにメンテナに送りつける。
>>127 でかいプログラムをひとつ用意して、いじめまくるとか。
自力でgcc動かせないようなターゲットだと、でかいコードなんてまず取り扱わないから、
いろいろ出てきて楽しいぞ。
GCC4.0.1をコンパイルできなかった・・・
gcc魂を見せつけたいなら既存の環境にコンパイルするのでなくて、 クロスコンパイル環境を構築すればgcc Level 10ぐらいになれる。
gccで、全アーキテクチャのクロスコンパイル環境を構築するとrmsのサインがもらえるって言うのは、 ガセ。
>>129 そういや、昔ビールウェアなんてのがあったな
ピザウェアにはお世話になりました
メンテナ、キタ━━━━(゚∀゚)━━━━!!!!
138 :
デフォルトの名無しさん :2005/08/14(日) 10:12:40
C++ でインクルードガードみたいなアホなことを書きたくないんだが、 コンパイルオプションは何を指定したらいい?
俺はどんなアプリも1ファイルで書ききるのでインクルードガードなんて不要。
141 :
デフォルトの名無しさん :2005/08/14(日) 14:25:17
失礼だけど意味は通じてる? C と違って C++ ではインクルードガードは本来必要ないはずだよ
143 :
デフォルトの名無しさん :2005/08/14(日) 14:35:17
インクルードガードって何?
144 :
デフォルトの名無しさん :2005/08/14(日) 14:43:58
>>143 俗語なので正式な定義はない
1つの翻訳単位の中で同一のファイルを2回以上引用したときに生じる重複宣言を回避する記述で
典型的な事例では #if 指令もしくは #ifdef 指令が使われる
例を挙げる
// hoge.h
#ifndef hoge_h_INCLUDED
#define hoge_h_INCLUDED
class hoge { };
#endif
インペリアルガードって何?
>>141 じゃあ気にしないで、インクルードガードしなければいいじゃん。必要ないんだろ?
うん。同じヘッダを2回呼ばなきゃいいだけなんだから たいした問題じゃないよな
148 :
デフォルトの名無しさん :2005/08/14(日) 18:16:00
138 ですが、自己解決しました # 以上、ギブアンドテイクの精神で釣り合うだけの内容の報告でした :-)
スレ荒さしといて何馬鹿なこと言ってるんだ? 解決策書いてけよ
150 :
デフォルトの名無しさん :2005/08/14(日) 19:33:31
ヘッダの中じゃなくてインクルードする側でやる方が賢い
151 :
デフォルトの名無しさん :2005/08/14(日) 19:53:21
今更インクルードガードで盛り上がれるのが羨ましい
インクルードガードと聞いてインペリアルクロスを連想し ロマンシングガイルまでたどり着いたのだが リンク先がなくなってる!
ガイルつながりで質問 変数の初期化がいるのに未設定のまま関数の引数に使ったりしたとき gcc -Wall でWarning出てたと思ったんだけど、今やったら出なくなってる なんていうオプションを使うんだっけ?
>>156 -Wallで警告が出るはず。ただし、-O以上の最適化オプションが必須。
と、gcc-3.4.4のinfoに書いてある。
-Wuninitialized + 最適化 + 条件諸々 能無しでスマソ。
能無しの上に被りました。
>>156 質問する場合は、gccのバージョンも書く事。
162 :
デフォルトの名無しさん :2005/08/16(火) 22:00:11
gccすげええええええええ
GCC3.4.4でi386がターゲットでビルドしようとしてるんだけどmakeでこける・・・ orz
そんなあなたに gmumake これで検索してみ
Objcをmakeしようとしたところでstdio.hがないって怒られてる
C MagazineにGCC4の比較記事発見。
>>166 Σ(゜Д゜;) マジ!
C Magazineって以前は読んでいたがあったが、コンパイラ関連の記事だと
IntelコンパイラやVisial Studioの話ばっかりだったので近頃全然読まなくなった。
立ち読みしてきた。 ・tree-ssaとかの話 ・ベンチマーク てなところですか。 買ってまで読むほどの内容じゃないな。
169 :
167 :2005/08/19(金) 19:38:08
>>168 げっ!もう買っちゃったぞ。
全160ページ中のたった8ページのGCC記事だけの為に。
けど、GCCの内部(しくみ)まで書いてる記事はあまり無いんで、別にいいやと思ってる。
>>169 そういえば、書籍じゃないからちょっと違うんだけど
この前gccのソースを読んだんだけど
内部の仕組みまでみっちりと書いてあったよ。
あれはひさびさにためになったなぁ
GCC解説・カスタマイズ記事は、Interface誌あたりに載ってなかったっけ?
172 :
167 :2005/08/19(金) 21:49:55
>>171 GCCの使いかた or オプションの紹介 or クロスコンパイル方法とかなら
雑誌や書籍やウェブサイトにあるけど、
GCCの内部動作を解説してるのは見た事ないような...
オライリーとかから、「詳細GCCインターナル」とか出れば買うかも。(w
そういう資料はUsing and Porting GCCくらいかの〜 さわりの書いてある本も昔あったような気がするが。
174 :
デフォルトの名無しさん :2005/08/19(金) 23:29:32
3.0.4リリース、おめでと、あげ 変更点は以下の通り ・GCC 3.0 now supports newer versions of the NetBSD operating system, which use the ELF object file format, on x86 processors. ・Correct debugging information is generated from functions that have lines from multiple files (e.g. yacc output). ・A fix for whitespace handling in the -traditional preprocessor, which can affect Fortran. ・Fixes to the exception handling runtime. ・More fixes for bad code generation in C++. ・A fix for shared library generation under AIX 4.3. ・Documentation updates. ・Port of GCC to Tensilica's Xtensa processor contributed. ・A fix for compiling the PPC Linux kernel (FAT fs wouldn't link).
177 :
167 :2005/08/19(金) 23:57:55
>>173 これらの事かな?
Gcc Command Options: Using and Porting the Gnu Complier Collection Gcc
(Using and Porting the GNU Compiler Collection)
ttp://www.amazon.com/exec/obidos/tg/detail/-/0595100368/ Gnu Reference: Using and Porting the Gnu Complier Collection Gcc
(Using and Porting the GNU Compiler Collection)
ttp://www.amazon.com/exec/obidos/tg/detail/-/0595100376/ Gcc Target Description Macros: Using and Porting the Gnu Compiler Collection Gcc
(GCC Target Description Macros)
ttp://www.amazon.com/exec/obidos/tg/detail/-/0595100384/ Customer Reviewsで、
>Not sure why I should buy this book as it is available on-line
>on a mirror-site near you. Save the trees!
>BTW, is this a typo or the second C in GCC now means Complier vs. Compiler as it
>was always the case in the past. The art on the cover looks bogus to me. Just
>wondering if the rest of the volume has been carefully corrected... Doesn't look
>to promising. Once again, it's easy to correct on the web.
>Prints are a total different matter.
なんて事を言われてるけど.....
178 :
デフォルトの名無しさん :2005/08/30(火) 14:40:34
>>168 GCC4.0だと-O最適化だけでGCC3.4の-O3に匹敵する速度向上が得られるような事が書いてあったが・・・あれホントなのかな。
>>178 特定条件下に限っては事実でしょ。
全般的にはいまいち感が漂うけど、土台を切り替えた直後でこれだけ速ければ上等だと思うけど。
それよりも strict-aliasing で死屍累々なことが大問題(^^;
ちゅうか、gcc4.0 + -mtune=pentium3でemacsがコンパイル通らんが…… ダンプでこける。 もちろん、-mtune付けなければ問題ないけど。emacsが対応してないだけだろうな。
>>180 -mtune ではなくて -march ではどうか?
てゆーかさ、今どきの流行は -mtune でなくて -march でそ。
流行りて(w 目的違うやん
184 :
180 :2005/08/30(火) 23:24:34
>>181 あゃ、間違えたぞ。
-march=pentium3だった。
ちなみに、gcc3系だと-march=pentium3でも無問題。
185 :
180 :2005/08/30(火) 23:43:32
>>184 おぅ?同じなの?
確かにどっちでも失敗する。4.0.1でも駄目。
temacsのビルドには成功するけど、それ動かすところで落ちるパターン?
-fno-strict-aliasing とか
>>183 > どうやら同じ意味みたいだね。-mtune、-march
ちゃうやろ、よく読めや。
ヒント: -march=pentium3 -mtune=pentium3
gcc での C++ の例外の扱いについて質問があります. gcc 3.3.5 で「throw "エラー!";」見たいな行を含むプログラムを -g オプショ ンつけてコンパイルして,valgrind を使って実行したところ下記の様なメッセージが出ました. # Hoge.cpp:137 がちょうど throw 文がある行です. ==13524== 8 bytes in 1 blocks are still reachable in loss record 2 of 30 ==13524== at 0x1B903BAE: malloc (vg_replace_malloc.c:131) ==13524== by 0x1C20A66F: __cxa_get_globals (in /usr/lib/gcc-lib/i686-gentoo-linux/3.3.5-20050130/libstdc++.so.5.0.7) ==13524== by 0x1C20B267: __cxa_throw (in /usr/lib/gcc-lib/i686-gentoo-linux/3.3.5-20050130/libstdc++.so.5.0.7) ==13524== by 0x1BCABE8C: hoge(char const*, unsigned*) (Hoge.cpp:137) これを見ると,throw することでメモリリークしてるように見えるのですが, そういう物なのでしょうか? ちなみに,投げられた例外は,下記の用にして catch してます. try { hoge(); } catch(const char *) { // 無視 }
191 :
デフォルトの名無しさん :2005/09/02(金) 12:39:05
age
march: アーキテクチャに最適化し、そのCPU以外では動作を保証しない。 mtune: スケジューリングに最適化するが、他のCPUでも動作を保証する。
gccで 漢字の文字をprintf();で出力することは容易ですか? それとも皆さん、英語でコメントを打っておられるのでしょうか
同じCPUで周波数だけ違う場合、marchでOKですか?
196 :
デフォルトの名無しさん :2005/09/03(土) 05:02:47
>>194 コメントは英語に決まっとろうが
世界屈指の難解語でコメント書いた気になってるヴォケは逝ってよし
>>196 それが金に結びつくのなら、なんだか金を稼げる匂いがするので英語で書いておきます
>>194 コメント?
フォーマット文字列に漢字を使えないかって言いたいわけ?
>>194 何が聞きたいのか正しく意図が伝わってこないが、たぶんできる。信じてやってみろ。
>>195 duron なんかは周波数でコアが違ってて -march も違った気がする。
>>194 eucなら大丈夫。sjisは\(バックスラッシュ)の問題があるのでやめといたほうが吉。
>>196 何かイヤな事でもあったんだろうか。
x86(IA-32)だと-marchの違いって、cmov(コンディションムーブ)の使用の有無 ぐらいだと思うんだけど、他に何かあるのかな?
>>201 韓国語でコメント書かれて切れたと想像してみる。
インドだと英語だから無問題。
ストールを避けるくらいのことはしているんじゃないの。
>>194 ,
>>201 最近のgccならオプションで文字コードを指定できるので全然問題ない。
eucでソースを書き、オブジェクトファイルに持たせるリテラルデータはsjisなんてこともできる。
64bit の gas では、 .long と .int は同じなんだね。 gcc on x86-64 の C では long = 64bit, int = 32bit だから、 なんかちょっと嵌まっちゃったYO!! ありがとう stallman!(涙)
I/F誌に連載されてたののまとめかな? だったら参考書として手元に置いときたいんでホスィ
皆はgccのソースとか普通に読める人達? 俺はかなりストレスたまってダメだったんだけど >170さん コメントみっちりどこにのってたの? これは返答にかなりの工数が必要ですね、ってんで覚えてたら是非
>>209 いや、コメントなんて不確かなものではなくて
コードがみっちりと書いてあった
gcc-2.xの頃、ソース読んだけど、 flow.c, gcse.c辺りの最適化の部分はコメントが結構多いよ。 けど、コードがすっきりしてないので解読しずらい。 学生の頃かなりコードは読んだけれど、解読が一番疲れたね。 gccより一時期最適化が優れていたコンパイラとか、 8bit時代に隆盛を誇ったコンパイラのソースを見る機会があったけれど、 ずっとすっきりしていたね。(どちらもproprietaryなコンパイラ)
>>211 8bit 時代のコードなんと比べてもなぁ。
まぁ、gcc のコードがあまり綺麗ではないのは事実だけど。
4.x はフルスクラッチだっけ?それなら多少マシになってるんじゃないか。
某16ビットコンパイラは一旦(独自)アセンブラ出力に落とすので、 一部の最適化のためにニモニックの方に工夫を施してあったりもした。 お蔭で調べる範囲がプロセスを跨る罠。
>>212 > 8bit 時代のコードなんと比べてもなぁ。
いや、凶悪な最適化をするので有名なコンパイラで、おもちゃコンパイラじゃないよ。
GCCをおもちゃにして遊んでる奴が一番最強。
>>214 8bit 時代の最適化と 32bit/64bit の最適化、どっちが複雑か考えるまでもない。
比較の対象外。
確かに最適化の難しさは違うよなあ。 アラインメントなんか気にしなくていいし、パイプライン気にしなくていいからジャンプし放題。 レジスタでもメモリでも速度余り違わないからレジスタ割付なんて考えなくていいし、ペアリングもない。
So what?
凶悪な最適化って言うと、コードの意味が変わるやつか?
220 :
デフォルトの名無しさん :2005/09/08(木) 22:02:11
volatile char *p; void wait(void) { volatile char *tmp = p; while(p != tmp) ; } ↑ こんなんで volatile を無視しやがった〜とか騒ぎ出すアフォが絡んでるケースが大半を占める
>>219 8bitCPUの典型的な最適化は、自己書き換えだね。
#ROM化が大変なんだけど。
222 :
デフォルトの名無しさん :2005/09/09(金) 00:15:50
何が? 命令書き換えなんてどーせアセンブラで書いてるだろ それとも動作保証のない禁止パターンでも使ってたのか 俺の知る限り 8bit には diagnose の類はなかったぜ
>>222 だからROM化が大変という話でしょ
RAMの上で動くなら問題ないけどさ
224 :
デフォルトの名無しさん :2005/09/09(金) 00:23:52
だったら「大変」がますます意味わかんねー
225 :
デフォルトの名無しさん :2005/09/09(金) 01:46:01
>>217 「ペアリング」っていう言葉が出てくるあたり、知識がPentiumで止まってるっぽい。
8bitで止まってる奴よりはましな気がするが。
対等な条件ではないものを持ち出してきてる時点で、脳が沸いてるとしか思えんな。
>>224 ROMからRAMに転送させるのが大変、とか。
その方法探す(マニュアル読む)のが大変、とか。
>>227 実際やってみてその無意味さに気が付くのもまた勉強。
普通なら脳内でやってすぐ気づくだろとか言わない。
最適化というよりは難読化になるけど、
複数バイトの命令の真ん中にジャンプして以降闇の中
なんてコードがあったなあ。
ROM上で動くから書き換えできないということで
>>228 闇の中どころか、3バイト命令の2-3バイト目はオペランドだからそこに2バイト命令を
置いておくのはよくある手法。
話ぶったぎっちゃうけど if (eval) { ...; } を if (eval) ...; と書くのは何故?最適化とか何か特別な意味があるの? gnuがらみ嫌がらで外して書いてのかって思う ブロック書いてくれるだけでだいぶ読みやすくなる。俺が変なの?
>>231 一行だったら時と場合によるんじゃ。
それともif 〜 else には必ずブロックつけろって言うこと?
>>231 その辺は宗教でしょ。プロジェクト内で統一されていれば問題ない。
GNU コーディング規約に従っているので、俺は別に構わないと思う。
>>231 >gnuがらみ(は)嫌がら(せ)で外して書いて(いる)のかって思う
これは嫌がらで外して書いてのか?
わろす
ifに必ずブロックを付けろという奴はいるけど、ポリシー貫くなら if (eval) { } else { if (eval) { } } と書かなきゃ片手落ちだよな。
もしもelsifがあったなら・・・と思ったことはある。
ない まったくない elsifなのかelseifなのかelifなのか つーか氏ねよそんなこと思うお前
>>237 そんなのマクロでどうにでもなるじゃないか。
240 :
231 :2005/09/10(土) 09:10:59
>233 そうなの?コンパイルすれば一緒になんの? >234 恐縮です if () ..; else for () if () break; これも入れないでいけちゃの?タフだね それより寝坊ねまずいね、急いで風邪ひかねーとまずい
個人的には、行を変えるならブロック化して欲しい。 for (...; ...; ...) { ; } って感じで。 逆に言うと、ブロック化しないなら1行野郎で。 for (...; ...; ...) ; あと、これはいやだ。 if (...) { ...; ...; } else ...; もちろん、これもいや。 if (...) ...; else { ...; ...; } 最近目にした公開ソフトのコーディングがこれでね……
べつにいいだろ いやとか言う奴は死ね
>>242 いやだから、修正する前に全部ブロック化しましたが何か。
いちいち自分の馬鹿さ加減をスレ違い報告する奴は死ね
gcc4って失敗作?
ブロック化しようぜ、そこいらに神経使うのうんざりだ どっちでもいいんだけどさ、統一しよう! 独裁的にしちゃってくれてかまわんさ 熱くなっちまった、今手元にあるの非じゃないよ ( .. ? : ( ? : (..)) ((.) ? : )) 見てこれ!マジ冗談抜き!!犯人でてこいやこれえ!! ブロックを書かない派はそれのほうが見やすいって事なんだよね これも速読できちゃうの?助けてくれない?
やだ
>>240 一緒になる。無知を晒すなよ…。
何度も言うけど、どれが読みやすいかなんて主観の問題。人によって違う。
だからプロジェクト間で統一が取れていればそれで良いと思う。
g++ A.a foo.o -o exec こんな感じで実行ファイルを作ってたんですが、 g++ A.a B.a foo.o -o exec と、リンクする.aファイルを2個にしたら上手く行かなくなりました。 こういった場合はどうしたら良いのでしょうか?
A.aはライブラリなのかい
ar rs A.a foo.o bar.o .... みたいに作ったものです。B.aも同じ感じです。
入れ替えて味噌 g++ -o exec foo.o B.a A.a B.aがA.aに依存していたらB.aを前にしてみるとか 俺にはこれ以上はわからない スマン
>>252 その並びに変えたら行けました。でもってB.aはA.aに依存してました。
ありがとうございました。
もし相互に依存しているなら、A.a B.a A.a B.aで解決。 #しないケースもあるから大笑い。
>GNUが低品質なのはconfigureと無関係ではないだろう。
嘔吐conf 嘔吐make
混不具屋
258 :
名無しさん@そうだ選挙に行こう :2005/09/10(土) 23:43:16
自慰乳
gccってコンパイル速度糞遅い Delphiぐらい速くならんの?
Delphiは某の伝統もあって糞早 でもGCCてガマンできないほど遅くはないと思うがのう?
言語仕様の違いや最適化の度合がコンパイル速度に影響しないと思っている 馬鹿がいるスレはここですか?
>>259 Pascal がお行儀の良い言語仕様だから
>>262 Ada@gccはC++と速度大差無いぞ…
Delphiのコンパイラはx86に最適化されてる気がする。
gccはクロスが売りだし…
Pascalの構文はLLって言うんだったっけ? しかし、TurboPascalにはお世話になったよ。 統合環境といい、爆速コンパイルといい、文字出力が言語仕様に 組込まれているし、エラーメッセージが日本語で表示されて、 なおかつ1つしか表示されないし、教育用途には最適だったな。 エラーメッセージが最初の1つしかでないなんてコンパイラとしては 最低だが、初心者にとっては非常に重要。 画面がエラーメッセージで埋まろうもんならやる気なくすしね。 スレ違いか、スマソ...
>>263 >クロスが売り
・ ・ ・
そのおかげで苦労するんだけどな
なんつったりしてなハッハッハ
Delphiコンパイラはx86というよりPascalに最適化というほうが正しいか… .dcuなんてプリコンパイルヘッダ+.objでしかもユニット単位だからC++のようにひとつのクラスのメソッドが別.objに格納されるケースなんて考えなくていいし。 実際C++Builderのコンパイルはそんなに早く無い。 gccはクロスだけじゃなくミックスランゲージコンパイラでもあるからな…(C++のプリコンパイルヘッダやAdaの.ali等はあるけど)
267 :
名無しさん@そうだ選挙に行こう :2005/09/11(日) 03:26:26
超初心者です、教えてください。 GCC でコンパイルするとき -S って付けると、アセンブラのソースが出力されますが、 C++のソースをコメントとして一緒に出力することはできないでしょうか? C++で書いたものがどういう機械語になるのか調べたいのですが・・・
>>245 失敗ってことはないよ。作りかけではあるけど。
・・・というか、たいていのソフトウエアは、常に作りかけなんだけどね。
>>267 C++のソースを一緒に吐けるのかは知らないけど、
ソースレベルデバッガを使うってのはどうでしょうか。
>>267 c++ -g -c foo.c して
objdump -S foo.o すれば同じようなことはできるかな。
gccにそういうオプションあってもいいのにな
271 :
名無しさん@そうだ選挙に行こう :2005/09/11(日) 07:32:00
>>261 コンパイル時間が余分にかかるくせにバイナリでけえんだよな
荒らしは無視 > all
272=荒らしな罠
274 :
名無しさん@そうだ選挙に行こう :2005/09/11(日) 07:47:06
>>267 extern void hoge();
main()
{
asm("; --------------------");
hoge();
asm("; --------------------");
}
初期のTurboPascalは1パスコンパイラだった。 最後までそうだったかは知らない。Delphiは1パスコンパイルできる仕様なんだろうか?
最適化する場合は少なくとも式に対して2パス必要。 そうしないと代入でえらい非効率になる。
277 :
名無しさん@そうだ選挙に行こう :2005/09/11(日) 09:50:10
2パス処理のくせに前方参照ができない変な奴が大半を占める歪んだ現状
278 :
名無しさん@そうだ選挙に行こう :2005/09/11(日) 10:03:48
よぉアホども
279 :
名無しさん@そうだ選挙に行こう :2005/09/11(日) 10:06:27
GNUは低品質ソフトを量産してるくせに業界ででかい顔
283 :
名無しさん@そうだ選挙に行こう :2005/09/11(日) 16:50:22
初歩質問です。 下のmakefile でコンパイルはうまくいくんですが、ライブラリリンクの方法を # でコメントしてある記述で 行おうとすると、dll not found エラーになります。 -L オプションでライブラリパスを指定しておけば、ライブラリ名だけでリンクしてくれるものと思っているの ですが、違うのでしょうか? また下記では、-l オプションを使わずにリンクできていますが、-l はどういう ときに使うのでしょうか? ライブラリの形式が関係あるのかな? ########################################################### BOOSTDIR = c:/usr/boost CPPFLAGS = -I$(BOOSTDIR)/include/boost-1_33 LIBS = $(BOOSTDIR)/lib/boost_filesystem-gcc-d-1_33.dll #CPPFLAGS = -I$(BOOSTDIR)/include/boost-1_33 -L$(BOOSTDIR)/lib #LIBS = -lboost_filesystem-gcc-d-1_33.dll TARGET = fs.exe OBJS = fs.o $(TARGET) : $(OBJS) g++ -o$@ $(OBJS) $(CPPFLAGS) $(LIBS) ############################################################
284 :
283 :2005/09/11(日) 16:56:05
>下のmakefile でコンパイルはうまくいくんですが 言い直します >下のmakefile でメイクはうまくいくんですが です。 コンパイルだけじゃなくリンクもできてます。
cygwinはよくしらんが、 LDFLAGS = -L$(BOOSTDIR)/include/boost-1_33/lib LIBS = -lboost_filesystem-gcc g++ -o$@ $(LDFLAGS) $(OBJS) $(LIBS) じゃないのか?
286 :
名無しさん@そうだ選挙に行こう :2005/09/11(日) 17:59:57
>>285 できました。
-l オプションの後には、ファイル名をフルネームで書くわけではないんですね。
でも、boost のライブラリ名が boost_filesystem や、 boost_filesystem-gcc-1_33 ではなく
boost_filesystem-gcc だというのは、どこからわかるのでしょうか?
何か命名規則があるのでしょうか? それともライブラリごとに任意で、boostのドキュメント
のどこかに書かれているでしょうか?
>>286 boostライブラリが何者かは知らんが、まともならドキュメントに書いてある。
>>287 了解しました。ありがとうございます。
ちなみに boost は、 C++ の準標準といわれるテンプレート拡張ライブラリです。
289 :
285 :2005/09/11(日) 18:23:30
ライブラリで、スタティックリンクできるものはスタティックリンクして、 .soしかないものはダイナミックリンクする、てのはどうやったら出来るでしょうか?
そうならない理由を排除する。
293 :
291 :2005/09/17(土) 09:05:10
4.0のくそったれ!! テメエのバグのせいでどれだけ時間をつぶしたことか。。
それが、『GCC』クオリティ
>>294 頼ってもいいが、信じるな
それがgccだ
snapshotをコンパイルすると gthr-posix.h:43: pthread.h: No such file or directory gthr-posix.h:44: unistd.h: No such file or directory てエラーが出るんですが、どうしたらちゃんと見付けてくれるんでしょうか? /usr/includeにはちゃんとあるんですが。
298 :
デフォルトの名無しさん :2005/09/19(月) 13:11:45
CQ出版からGCCの本がでるみたいだね
>>297 ・実はマルチバイト文字
・「ちゃんとある」のはpthread.hやunistd.hではなくgthr-posix.hだけだった
gcc4.0以上のWindowsバイナリってないの?
>>302 AdaとFortranとObjective-Cは眼中にすら無いですかそうですか。
FortranとObj-Cはともかく、Adaってどのような人種に需要があるんだろう……。
C++0xに失望、または待ち切れない人はAdaに来るべし。 今Ada@gccが熱い。 新規格Ada2005がほぼ固まりつつある最終段階にあり、月に何度か一気に大量のパッチが適用されて、どんどん言語が変わってる。 バージョンの下一桁が上がるごとに追加される構文、ライブラリ、直されるバグ。 新規格そのものも、米国防総省の言語のはずなのに、互換性どこ吹く風でinterfaceやdownward closureをはじめ言語の使い方を一変させる新機能の嵐。 これを追いかけなくてどうするっ。
妙に熱いのでもっと詳しく
>>304 軍関係。今はDoDも必須じゃないけれど。
gcc3.3.6の最適化機構にgcc4のc++コンパイラなgccでないのかな
間違えたこっちだった。 D Digital Mars 36.53 C gcc 28.71 Ada 95 GNAT 27.43 Pascal Free Pascal 20.21 C++ g++ 18.05
それも、inline指定の有無とか、軽い構造体と重いクラスが別にある言語でどちらを使うかとか、Delphiトップとか最下位のREBOLミッシングと失敗ばっかじゃんとか納得行かんところはあるなあ。 関係ないが、ベンチマークやるなら、各言語の特長を活かしライブラリを活用して奇麗に書く部門と、小手先の最適化駆使の速度追求部門が必要に思えた。
というか、コンパイラ実装の比較なのか、言語仕様の比較なのか orz
その点は、同じ言語でも複数コンパイラ出してきてるから、実装込みと思ったが
>>313 なんだよ。そこのページWindosじゃねーかよ。
萎え
Windos ってなーに?(^Д^)
上位にはないけどjavaすごいな、速度はあとからなんとかなるもんなんだね とりあえずベンチマーク鵜呑み、ヨロシク!
321 :
名無しさん@しぃあぃ :2005/09/29(木) 19:10:10
GCC用のオススメのIDEはなに?
>>323 IDEとは何か調べてから出直す必要はない。もう来るな
>>322 Windows 使いの人なら、sambaで共有しつつビルドコマンドにはrshなど使って
Visual Studio で作業するという方法も検討してみて。結構いける。
>>322 MinGW+テキストエディタ。これ最強。
まあ・・・makeで十分な気も・・・
DEV-C++、MinGWでいいじゃん。 パッケージマネージャが激しく使いにくいけど。
Eclipseはmake書かにゃならんのが残念だなぁ
333 :
デフォルトの名無しさん :2005/10/01(土) 00:43:40
最近のEclipse+CDTはmakeの自動生成もやってくれる。
makeが自動生成されるのがちょっとうっとうしい
自動生成されるのとされないのと選べるじゃんか
>>336 managedって方が自動生成、standardが生成されない方
managedは、プロジェクト名に相当する実行形式をつくるmakefileを生成する
gccと結婚したい
CPUになりたまえ
父はRMS
gcc Developer Stationってのは試した人います?
342 :
デフォルトの名無しさん :2005/10/02(日) 16:40:35
gcc 初心者です。教えてください。 gcc 3.2.2 で生成した C オブジェクトを gcc 3.4.3 でリンクできるのでしょうか? ちなみにソースは C++ です。 今度 3.4.3 環境で作る事になりそうでして。 以前、マイナーバージョンアップでも上位互換無いような事を 聞いたもので、心配してます。 宜しくお願いします。
4.0ちょっとひどくない? しんどい部分頑張ってるっぽいけど、時期尚早でした >343 3.3にすれば全盛期のgccにあえる?
>>344 バージョン番号の法則からは逃れられないということでしょう。
>>344 3.4でいいと思うけど。
いずれにせよ、自分のLinux boxには、2.95, 3.3, 3.4, 4.0がインストールされてます。
古いABIのままのlibraryがあるし、4.0は未だ不安なので。
348 :
デフォルトの名無しさん :2005/10/03(月) 00:45:02
>>343 早速の回答、ありがとうございます。
やはりそうなんですね。
gcc、遊びで使った事はあるのですが、
今度仕事で使う事になりまして。
色々調べていたのですが、
本格的に使おうとすると結構敷居高いですね。
どうもでした_(._.)_
>>348 いや、ABIの変更なんて当分ないから。
「以降」と「以前」じゃ被るんじゃねーか? そもそも「以前」の対義語は「以後」で…。
>>350 そんな些細なこと気にすんなって。気楽に行こう。
行こうと以降をかけています。
より前、以前は日常語としても範囲があやふやだな。 より後、以降、以後もあいまいだわ・・・。
>>352 あやふやったって、基準点を含むか含まないか程度のあいまいさだろ。
以前と言って未来を指す訳でもないんだからよ。
あいまいさを無くそうとすると xxxより前(xxxを含まない)のバージョンでは xxx以前(xxxを含む)バージョンでは と括弧書きが必要になるんがツライかなぁ。
初めましてルマンドという者です。 g++ から Windows のライブラリにリンクしたいのですが方法が分かりません。 下記のmakefileとソースファイルで、その下のようなエラーが出ます。 MinGW のサイトにあるように、makefile の $(libraries) の位置を変えたりしたのですが、 うまくいきませんでした。オプションなどがあるのでしょうか? 環境はWinXP+SP2、MinGW4.1.1です。よろしくお願いします。 -- makefile(一部抜粋) -- objects = $(sources:.cpp=.o) libraries = C:/Program_Files/Microsoft_Platform_SDK/lib/wininet.lib $(project_name).exe: $(objects) g++ -mconsole -mwindows -o $(objects) $(libraries) .cpp.o: g++ -mconsole -mwindows -c $< -o $@ -- source file -- #include "test.h" #include <wininet.h> int main() { HINTERNET handle = InternetOpen("test", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); InternetCloseHandle(handle); return 0; } -- error -- ./output/test.o(.text+0x52):test.cpp: undefined reference to `InternetOpenA@20' ./output/test.o(.text+0x8a):test.cpp: undefined reference to `InternetCloseHandle@4' collect2: ld returned 1 exit status 長くなってすいません。
reference を解決しろ。 はい次。
libraries = -lwininet $(project_name).exe: $(objects) echo g++ -mconsole -mwindows -o $@ $(objects) $(libraries) >355 echo collect2: ld returned 1 exit status 一字一句正確に、コピ禁、手打ち
>>357 素早いお返事ありがとうございます。
うまく動かすことが出来ました。
g++ からの場合は .lib ではなくて .a のライブラリを読むんですね。
普段は Visual Studio を使っていたので全然無知でした……。
また初歩的な質問をしてしまうかもしれませんが、これからもよろしくお願いします。
妙な挨拶みたいになりましたが……。
VCのライブラリとGCCのライブラリの間には 互換性は無いんでしょうか?
ない。
>>360 なるほど、わかりました。ありがとうございます。
バイナリフォーマットは互換性があるが リンケージの違い、ABIの違いが少々存在するので 一筋縄ではいかない(ことが、ある)。
最近のMinGWだとVC++の.libをそのまま喰えなかったっけ。
mingwというよりはむしろbinutilsのx86-pe-coff つまり、喰うだけだったらCygwinでも他ホスト上のクロス環境でも喰える。
mingwはほとんど食えるよね、逆がうざいぐらいに食い残す
366 :
デフォルトの名無しさん :2005/10/07(金) 00:30:21
食い残しってどうやったらわかるん?
無理矢理喰わせて吐きだすかどうか。
おうぇっ
食い残しは食えるけど、ゲロは食えねえなぁ。。。
可愛い女の子のゲロなら食えます。
嘘だッ!!
炒めて酸味を消すのがポイント
漏れはgdbにはなれそうにないのはわかった
gdb = gero debugger
げろこんぱいらこれくしょん?
Gero is Not UNIX
377 :
デフォルトの名無しさん :2005/10/09(日) 08:56:24
あー、それで core 吐くのか
マニアはゲロを詳細に分析するからな。 ゲロで体調がわかる。
379 :
デフォルトの名無しさん :2005/10/09(日) 17:00:38
Men's 5 の歌?
380 :
デフォルトの名無しさん :2005/10/13(木) 08:11:18
「可能」とコメントに入れたらコンパイルしてくれないのは仕様ですか?
/* コンパイル可能 */ // コンパイル不可能
-finput-charset=cp932 -fexec-charset=cp932 を入れたらコンパイル可能 (gccが対応している時)
2バイト目に0x5cったら結構な数ありそうだね /* これでくくれってことっすね?*/
それでもダメ! ってことあったっけ? gccにはあった気がする
-finput-charset=cp932 -fexec-charset=cp932 はスルーですか そうですか ひとり言 gccの3.4.x以降で configureに --enable-c-mbchar を指定してgccを作成すると 上記オプションが有効になるみたい mingwではOKだった ついでにAVR用のgccも作成してみたがこれも無問題でした まあ対応していないコンパイラのことを考えると結局 /* これが正解ですね */
/* コメントならこれでよいけど */ printf("表示テスト") は printf("表\示テスト") としなければいけないので・・・
805c 815c 825c 835c 845c 855c 865c 875c '\' '―' '・' 'ソ' 'Ы' '・' '・' '\' 885c 895c 8a5c 8b5c 8c5c 8d5c 8e5c 8f5c '・' '噂' '浬' '欺' '圭' '構' '蚕' '十' 905c 915c 925c 935c 945c 955c 965c 975c '申' '曾' '箪' '貼' '能' '表' '暴' '予' 985c 995c 9a5c 9b5c 9c5c 9d5c 9e5c 9f5c '禄' '兔' '喀' '媾' '彌' '拿' '杤' '歃' e05c e15c e25c e35c e45c e55c e65c e75c '濬' '畚' '秉' '綵' '臀' '藹' '觸' '軆' e85c e95c ea5c eb5c ec5c ed5c ee5c ef5c '鐔' '饅' '鷭' '・' '・' 'x' 'x' '・' f05c f15c f25c f35c f45c f55c f65c f75c '' '' '' '' '' '' '' '' f85c f95c fa5c fb5c fc5c '' '' '\' '\' '・'
printf("第十\回 噂\の饅\頭暴\食大会の予\定"); てな表\記を貼\ってみた
// 構\造体の定義 とか、初心者が書きそう
// 噂の曾爺さん無免で箱乗り申し上げます やっばいねこれ無駄に熱くなるね
そういえば漢字を文字コードに展開するフィルタ作ったことがあったなあ。 文字列の判定が適当だったので、たまに全然関係ない所まで書き換えられて 謎なエラーに悩まされたものじゃ。
>>391 最後が「義」だから問題ないでしょ。
// 〜 \
となるのが継続コメント行で問題なんだから。
nkfを改造して第2バイトに0x5cがきたら\を追加するオプションをつけたことは ある。当時はなかなか役に立った。 しかもnkfをちょちょいと変更するだけだから簡単クッキング。
gccならlocaleをja_JP.sjisにしとけばいいだけだろ? HAVE_LOCALEとHAVE_ICONVでコンパイルされていれば。
2byte文字、例えば "表示" を "\225\134\216\246" みたいにするフィルタをかませばよい
400 :
デフォルトの名無しさん :2005/10/15(土) 01:07:08
int data[100] __attribute__((section ("xxx"))); ってそーすをコンパイルして、gcc sore.c -Wl,--section-start -Wl,xxx=0x300 とかしたら、dataが0x300に配置されるのかな?と思ったけど、うまくいかなかった。 ハードウェアのメモリにちゃんとアクセスできてるかを、PCでシミュレーションしたかったんだけど、 うまい方法ないっすかね?
そのメモリの値を読めば良いだけじゃね?あとフォローよろしく↓
402 :
400 :2005/10/15(土) 01:22:11
例えば、 ushort* p = (ushort*)0x300; *p = 35; とかってソースかいて特定のアドレスに書き込むんだけど、 これ、PCでやったらエラーでちゃうんですよ。 そこで、配列用意して、それのアドレスが0x300に配置されてたら、 PCでもエラーにならないとおもったんだけど。 こういうコードがいろいろ散らばってるんで、PCで走らせて、 意図した値が書き込めてるかテストしてみたいんです。 他にも、--check-memory-usageも考えてみたんだけど、いまいちで。
#define data ((int *)0x300) じゃ駄目なのかな
PC上でそのまま走らせてるわけじゃないですよね? PC上で動くエミュレーターですよね? 0x300なんて下位過ぎるアドレス、OSが保護してると思うんだ…。
405 :
400 :2005/10/15(土) 01:36:20
PCでコンパイルしてそのまま走らせてます。 エミュレータがないんで...
だからターゲット用にコンパイルするときはdefineなりでベースアドレスを指定して PCで動作確認するときはグローバル変数なりにしときゃいいだけじゃないのか
407 :
400 :2005/10/15(土) 01:42:26
>>406 たしかに、それもいいとは思うんだけど、
ソースがそれを意識して書かれてないと、ダメだよね。
とりあえず、「PC上でそのまま動かす」「0x300番地に書き込んで確認したい」 なんていってるようじゃ、どうしようもないと思うけどね。 DOSでも使ったら。
例えばWindowsだったら4GBのアドレス空間中、起動した.exeそのものは0x00400000から〜、後半2GBはOSのdll、という風に、 OSによって大体のアドレスの使われ方は決まってしまうわけで…。 0x300なんて端っこは、恐らくというかほぼ確実にというか、まず空いて無いと思われます。
410 :
400 :2005/10/15(土) 01:46:01
やはり、ダメですか... 妙な質問のお相手していただいて感謝です。
>409 論理アドレスと物理アドレスのことを分かって書いてる? どちらにしろPC上で意味もなく固定アドレスに書き込もうとしているのは間違い
>>411 いや…この上VirtualAllocの説明までしたくなかったし…。
413 :
400 :2005/10/15(土) 01:54:15
>いや…この上VirtualAllocの説明までしたくなかったし…。 そうではなくて AとBのプロセスを同時に走らせているとして Aの0x300とBの0x300番地は物理アドレスではまったく別の場所を指しているのだけど 通常のプログラムで0x300番地をアクセスしたら自分の論理番地0x300をアクセスすることになる またOSにより論理アドレス0x300に対する物理アドレスは変更されることもある
Windowsはぬるぽ用に最初の1ページは使用不可になってるね。0x300は 1ページ以内だな。UNIX系だと0番地にmmap()できるのはあった気がする。
おいおい、I/Oのアドレスをソース内に即値でちりばめてるのかよ。 そんなだから、こういう腐った質問や腐ったやり方を考えようとするんだろうな。
開発中はごまかしといて実機でテストするのがいいと思うよ
>>414 それはそうだが、そこまで説明いらんっしょ…。
理解して無かったら、「起動した.exeそのものは0x00400000から〜」なんて決め打った数字書かないよ。
>>413 要求は出来るが必ずしも要求が通るとは限らないです。
確かに、同じアドレス空間を確保することで、ポインタ込みの永続化を実現するライブラリなんてのもあることはあるけどさ(ボソ
>おいおい、I/Oのアドレスをソース内に即値でちりばめてるのかよ。 いやメモリのアドレスの即値だと思うんだが
メモリだってI/Oの一種には違いな…じゃなくて、CPUによってはポートを特殊なアドレスに割り当ててるのはありますね。
「CPUによっては」というとりハードによってはかな x86だとI/Oマップドとメモリマップドの両方出来るから
422 :
416 :2005/10/15(土) 02:10:25
>>419-422 うん、まあ、メモリマップドI/Oのつもりで書いた。
8086の割り込みベクタとかならともかく、
メモリの即値が必要なのって、そういうケースしか思いつかなかったから。
そうだね 8086だと0x300ってベクタ領域だ
424 :
デフォルトの名無しさん :2005/10/15(土) 02:18:21
gccで作ったプログラムはソースを公開しなければいけない
こらこら
バイナリを持ってる人が要求した場合だけっしょ? GPL3で拡大しようという動きはあるけどさ、とりあえず今のところは。
GPLなライブラリとリンクしてるならともかく そうでなければ公開の必要はなし この話しはGPLスレだな
>429 この男もトンチンカン2
>430 429は多分MMUのことを知らないんだよ
論理アドレス空間にカーネルが全くいないと思っているのか?
なぜカーネルの話題が必要なのだ?
同様に >409はなぜ物理メモリの話が必要だったのか?
ていどひくいな
そりゃ2chだもの
437 :
デフォルトの名無しさん :2005/10/15(土) 10:45:29
頭悪スレでやってくれ
読み出し時にlong型の変数で取って、MASKとかしなければいけないんじゃない? そういう問題じゃなくて? 4byteCPUだと4の倍数byteのアドレス指定しないと読み込めないとか。
439 :
デフォルトの名無しさん :2005/10/15(土) 11:30:40
CPUの品種により対応状況はまちまち
すいません頭悪スレってここですか
gcc! gcc! gcc! (AA略
442 :
400 :2005/10/15(土) 12:42:02
mmapでどうにかできました。 実際には、たしか0xA000以降にアクセスできればよかったので、これでいけるかも。 うちのknoppixでは0x1000以降なら配置できるようでした。 しかし、セクションの割り当てでうまくいかないのはどうしてだろう? いろんなアドレスでやってみたけどうまくいかなかったから、 attribute文法とか-Wl,--section-start -Wl,secname=addrの使いかた間違ってます?
gcc -Wl,--section-start -Wl,xxx=0x300 store.c /usr/bin/ld: a.out: Not enough room for program headers (allocated 7, need 8)
444 :
400 :2005/10/15(土) 13:44:16
>>443 さん
そのメッセージでないのですが、store.cの中身みせてもらえます?
gcc 4.0.2 int data[100] __attribute__((section ("xxx"))); 2.95.4, 3.4.5, 3.3.5でも同様。 Linux foobarbaz 2.6.11.7 #1 Thu Apr 14 00:13:35 JST 2005 i686 GNU/Linux
446 :
400 :2005/10/15(土) 14:01:04
>>444 そのソースだと以下のようになりません?
knoppix@2[knoppix]$ gcc -Wl,--section-start -Wl,xxx=0x300 store.c
/UNIONFS/usr/bin/../lib/gcc-lib/i486-linux/3.3.6/../../../crt1.o(.text+0x18): In function `_start':
../sysdeps/i386/elf/start.S:98: undefined reference to `main'
collect2: ld はステータス 1 で終了しました
knoppix@2[knoppix]$ cat store.c
int data[100] __attribute__((section ("xxx")));
knoppix@2[knoppix]$ uname -a
Linux Knoppix 2.6.11 #2 SMP Thu May 26 20:53:11 CEST 2005 i686 GNU/Linux
knoppix@2[knoppix]$ gcc --version
gcc (GCC) 3.3.6 (Debian 1:3.3.6-5)
447 :
400 :2005/10/15(土) 14:04:11
>>446 つまり、mainとリンクすればうまくいくってことですか?
data=0x300ならそうなります。 "xxx" section用のELFヘッダ領域がないからでしょう。 > Not enough $ ld -v GNU ld version 2.16.1 Debian GNU/Linux です。
450 :
400 :2005/10/15(土) 14:14:47
mainを追加して、出力してみました。ぜんぜんアドレスが反映されないのです。 knoppix@2[knoppix]$ cat store.c #include <stdio.h> int d[0x100]; int data[0x100] __attribute__((section ("xxx"))); int main() { printf("d =0x%X\n", (unsigned int)d); printf("data=0x%X\n", (unsigned int)data); return 0; } knoppix@2[knoppix]$ gcc -Wl,--section-start -Wl,xxx=0x3000 store.c -Wall knoppix@2[knoppix]$ ./a.out d =0x8049A40 data=0x8049520
451 :
400 :2005/10/15(土) 14:16:06
knoppix@2[knoppix]$ gcc store.c -c knoppix@2[knoppix]$ objdump -h store.o store.o: ファイル形式 elf32-i386 セクション: 索引名 サイズ VMA LMA File off Algn 0 .text 0000003f 00000000 00000000 00000034 2**2 CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE 1 .data 00000000 00000000 00000000 00000074 2**2 CONTENTS, ALLOC, LOAD, DATA 2 .bss 00000000 00000000 00000000 00000074 2**2 ALLOC 3 .rodata 00000016 00000000 00000000 00000074 2**0 CONTENTS, ALLOC, LOAD, READONLY, DATA 4 xxx 00000400 00000000 00000000 000000a0 2**5 CONTENTS, ALLOC, LOAD, DATA 5 .note.GNU-stack 00000000 00000000 00000000 000004a0 2**0 CONTENTS, READONLY 6 .comment 00000025 00000000 00000000 000004a0 2**0 CONTENTS, READONLY knoppix@2[knoppix]$ ld -v GNU ld version 2.15
gccスレよりknoppixスレでやったほうがいいんじゃないの。 機種依存の端の話だし。
ちゃんとldscript書かなきゃダメでないか? knoppixスレもスレ違いだろ。linker && loader スレかな。人いないけど。
いないわけじゃないんだけど、漏れにはちと荷が重いな。
0x300みたいな低いアドレスは、
>>415 の言う通り
仮想メモリ持ってるOSだと大抵はぬるぽ検出用にプロテクトされるから、
OSのローダーが親切にアドレスずらしてるんじゃないかねえ。
手元のFreeBSDで試してみたが、
>>400 とほぼ同じ結果だった。
cygwinで試したら「有効なWin32アプリケーションではない」と言われたから、
多分OSというかローダー依存と思われる。
移るならL&Lスレだろうが・・・わかる奴いるんかなあ。
455 :
デフォルトの名無しさん :2005/10/16(日) 19:20:23
元々の真意としては再配置可能モジュールってだけだったがな
undefined reference to `libmsvcrt_a_iname' これはどんな原因かズバリ教えてください。 ズバリヒントください。どうか
SOS!! Info: resolving __pctype by linking to __imp___pctype (auto-import) fu000001.o(.idata$3+0xc): undefined reference to `libmsvcrt_a_iname' fu000002.o(.idata$3+0xc): undefined reference to `libmsvcrt_a_iname' fu000003.o(.idata$3+0xc): undefined reference to `libmsvcrt_a_iname' fu000004.o(.idata$3+0xc): undefined reference to `libmsvcrt_a_iname' fu000005.o(.idata$3+0xc): undefined reference to `libmsvcrt_a_iname' fu000006.o(.idata$3+0xc): more undefined references to `libmsvcrt_a_iname' follow nmth000000.o(.idata$4+0x0): undefined reference to `_nm___pctype' 少ない脳で思いつく限りの食わせ方したんですが fu000005〜fu000011に数がかわるだけで、ずっとこんなんです。
>457 かしこまりました。 3連投失礼しました。
gcc3.3.3使ってるんだけどC++のコードでちょっと困った状態になったので教えて欲しい。 O'REILLYから出てる本の後ろに付いてるQuaternionクラスとVectorクラスを 書いて使っているんだけど、メンバ関数やoperatorで引数を参照渡しにしたんだ。 VC++では上手くいってたんだけど、gccだと一時変数や演算結果を引数にすると 値渡しのオーバーロードが見つからないってエラーを吐いてしまう。 例えばQuaternionのコンストラクタで Quaternion::Quaternion(float n, Vector &v); があったとすると Vector v; float n; Quaternion q(n, -v); みたいなコードを書くと error: no matching function for call to `Quaternion::Quaternion(float&, Vector)' って言われる。しかもfloatの方に参照がついてるし。 何とかならないかな?
>> 460 -Quaternion::Quaternion(float n, Vector &v); +Quaternion::Quaternion(float n, const Vector &v);
>>461 遅レススマソ。
よくなりますた。
一時変数はリテラルと同じで変更を許さないって方針なのかな。
orz
>>462 その通り
VC++はレベル4では警告を出す
GCCが文法としては正しい
これはすごく難しい問題をC++言語に提起しているので
たぶん将来改定される
ホントだ。いつもW3でやってたから知らなかった。 しかし・・・参照にするとちょっと複雑な式が動かなくなるってのは結構不便だ・・・ コンパイルオプションで何とかならないのかなぁっつーのはconstを省く怠け者の戯言か。 TECH IのGCC本が出たけどC++については何も載ってなくて残念。 買ったけど。
>>464 文法(syntax)じゃなくて意味(論; semantics)な
467 :
デフォルトの名無しさん :2005/10/22(土) 18:16:18
>>465 意味的なことをよく考えてみれって
非const参照(書き込み可)で渡すってことは
その関数が書き込んだ値を後で使うからすぐには消さないってことだろ
そういうときは変数作るやん
関数内で書き込むけどそのとき限りで関数から抜けたらあぼーんは参照じゃなく値だよな
>>465 const は「省く」なんて言えるもんじゃないぞ。
有るべきところに無いのは「間違い」だ。
469 :
デフォルトの名無しさん :2005/10/22(土) 18:36:15
>>468 つーても operator = の返却値だとか = 0 で mutable が必要になったりとか
判断が難しいのは普通にあるね
ソースに見慣れない __try { } __finally { } ってのがあったんですが、Borland?VC?だかの拡張だそうなんですけど gccで置換えるものってあります?ここだけgcj使うとか無茶は通るわけないよね
C++ SEH 例外 あたりでぐぐるとヒントが見つかろう。 Win32アプリケーションはともかくDDKあたりでは避けて通れない。 mingw とかでどう置き換えていいものやら折れも知りたい。
C++にしていいなら、効率無視で bool f; try{ f = 1; f = 0; throw gomi; }catch(...){ if(f) throw; } とかでいいんでは。
APIがSEH例外投げるときはどうしたらええんべ?
ReactOS方面でgccのSEH対応パッチがあったような記憶があるな。
if(a==TRUE)とかやると大抵はエラーの元になるので マクロかなんかで、例えば UNKO というdefineを使うと if(a==UNKO) と if(!a) が等価になるような、そんな プリプリプロセッセを作りたいニャ
478 :
デフォルトの名無しさん :2005/10/29(土) 03:32:16
ctor は基本的にはゼロクリ等、他のオブジェクトに関係しない初期化のみに限定 ポインタ貼ったり数をカウントしたりは ctor のコンテキストからは呼び出さない関数で行う
>>476 VCの素のSEHはebp縛りのハンドラ呼び出しとか小汚い実装なんだよな。
一度_exceptで例外受けると同じ例外の再throwはもちろんできないので
C++の様にはいかない。
またCで書く以上、コードスタイル的に__finallyは別になくても良いし。
移植性を考えると結局はハードウェア例外を捕捉する用途以外は積極的に使えない。
Windowsと心中するつもりの奴向けだな。
>>475 て言うか、a の真偽を判定するのに if(a==TRUE) なん
て書く奴は、アフォだと思う。
リンカスクリプトの書き方をアホみたいに詳細に解説した ホームページを教えれ
483 :
デフォルトの名無しさん :2005/10/30(日) 14:55:32
g++のことは、ここで聞いたらダメなんですか?
ダメです。 って言われたら、おまいどうするつもりだ?
gcc じゃなくて GCC なんだから構わないだろ? >1 にも GNU Compiler Collection って書いてるじゃないか。
聞いてみてダメだったらスルーされるだけだから。
487 :
デフォルトの名無しさん :2005/10/30(日) 15:15:59
じゃあ聞く。 g++の後継コンパイラがGCCとは別になるって本当ですか? 今までgccと統合してきたことによる様々な弊害を解消するのが目的だそうです。 GNUとしても今後はGCCよりg++の後継コンパイラに力を注ぐそうです。 あともう一点、LinuxがC++でスクラッチから書き直されているそうです。 リーナスの手によって。
489 :
デフォルトの名無しさん :2005/10/30(日) 17:42:52
>あともう一点、LinuxがC++でスクラッチから書き直されているそうです。 >リーナスの手によって。 テラワロスww わざわざC++にするなんて無駄だろ
>>489 話の真偽は知らんけど、デバドラなんかは C よりも
すっきり書けると思うよ。
そういう意味じゃ、MINIX なんかの方が C++ で書
く意味があるかもね。
new使わないC++を特別に名付けるとしたら なんて名前がいいかな
>あともう一点、LinuxがC++でスクラッチから書き直されているそうです。 >リーナスの手によって。 ポインタきぼんぬ。 ABIに起因する多くの欠点 >>> 自然にOOが出来る利点 なので、C++でカーネル書くのは、到底おいしいとは思えないのだが。
493 :
デフォルトの名無しさん :2005/10/30(日) 18:01:21
>>489 レスありがとうございます。
笑ってもらえて光栄です。
494 :
デフォルトの名無しさん :2005/10/30(日) 18:02:35
>>492 おいしくないはずがないですよ。
C++はオブジェクト指向なんですから。
分業の時代ですよ?
> ABIに起因する多くの欠点 詳しい説明求む。
496 :
デフォルトの名無しさん :2005/10/30(日) 18:08:48
498 :
デフォルトの名無しさん :2005/10/30(日) 18:20:08
>>491 C++
使うかどうかは言語の種類にあらず
>>497 も捨てがたいけど、
>>496 でいくよ
>>498 C++の一部だけを使って高機能なCとして使うのを
ベターCとか言ったりするでしょ。あんな感じ。
C99で満足しろ。 どうせなら、OSはC++じゃなくて、Objective Cで書いて欲しい。
たまにいるんだよな、オブジェクト指向にすれば何でも上手く行くと 思ってる奴…。
504 :
デフォルトの名無しさん :2005/10/30(日) 19:23:53
GCCってガーベージコレクションの略?
Gカップ Cカップ Cカップ の三人組アイドルユニットです
ごっつい コアラ カッコイイ
507 :
デフォルトの名無しさん :2005/10/30(日) 20:53:47
>>500 C++ is a better C と同様に
C++ is a 何と言いたいんだ?
ちなみに new を使わない分野は実在するが
厳密に定義されたコーディング基準あるいは制限にいちいちコードネームはあんまり付けない
スレ違いだな。
>>487 >あともう一点、LinuxがC++でスクラッチから書き直されているそうです。
>リーナスの手によって。
何この壮大な釣りww
(・∀・) 巣にカエレ
>>499 URL ありがと。
ただ、これってインターフェースの問題で、既存の言語でもそれなりに発生す
るよね。まあ、OS の API がころころ変わるのはあまりないけど、ライブラリ
がバージョンアップした時によく聞く話だよね。
でも、(
>>487 が正しいとして) Linus 氏が API まで変更するとはあまり思え
ない。
純然に、OS の内部を C++ だけで書いてるだけじゃないかな?
まあ、C++ のオブジェクトベースで資源が使える OS と言うのも面白そうだが、
バージョンアップにそれなりに耐えうるためには、何らかの動的な解決策が必
要だと思うので、C++ ではちょっと難しい感じがする。
>>507 コーディング規約とかじゃなくて、C++ のサブセット版みたいな感じだと思う
けど。イメージとしては、MemorySafe C++ みたいな。
> 厳密に定義されたコーディング基準あるいは制限にいちいちコードネームは
> あんまり付けない
MISRA とかは無視なの?
511 :
デフォルトの名無しさん :2005/10/30(日) 22:26:25
>MISRA とかは無視なの? あれのどこが厳密なんだよ
>>507 気持ちの問題だよ
コードネームついてた方がかっこいいじゃん
それだけ
Linus :「LinuxをC++で再構築する予定は無い。go to hell!」
514 :
デフォルトの名無しさん :2005/10/30(日) 22:43:14
いまだに変数名をなんにするか程度でモメるのに、 これからLINUXをC++で書き直すんですか?
C++で書き直すって!? これからのLinuxは全コンパイルがデフォですか?!
BeOSをバカにするな!!! 謝れ!!!
518 :
デフォルトの名無しさん :2005/10/31(月) 01:30:28
ちょっと思うんだが、Pimplイディオムって基本的には抽象クラスを使えば済む話じゃないの? まったく同じ指向のものってわけじゃないだろうからどっちか一方イラネってことじゃないけどね。
書き直すって程馬鹿な行為はない。 しかもC++でって、Cからの移行メリットがほとんどない。 ライナスがそこまでアホだとは思えないんだが。 Perl6を見ろ。
>517 BeOS知らないやつらにまでばらすな!!! 嘘だと言え!!!
いつまでネタを引っ張れば気が済むのかと
>しかもC++でって、Cからの移行メリットがほとんどない。 違う。 「LinuxにおいてCからC++への移行メリットは全く無い。」
OS を C++ で実装するのに、FBC への対策として Pimpl を持ってくるのは ちょっと違うと思うがね。
対象が何でも同じだろ。 Kernelだってloadable moduleの互換性なくなるし。
Objective-Cにしておけばいいのに。 拡張が容易。
>>526 Lisp にしておけばいいのに。
拡張が容易。
アセンブラにしておけばいいのに。 工数の都合上、お客様のご要望にはお応えできまsn
Brainf*ckにしておけばいいのに。 読める人間がいないので、セキュリティも万全。
ひまわりにしておけばいいのに。 日本人開発者が増える。
>ひまわりにしておけばいいのに。 >日本人開発者が増える。 それは無さそうだよ
GCCでひまわりがコンパイル出来るようになるのは何時頃ですか?
>>533 あなたがGCC開発プロジェクトに参加したその瞬間に、道は開けます。
用意はいいですね?それでは、始めましょうか。
ひ
ろ
し
で
ん
せ
つ
542 :
535 :2005/11/05(土) 00:48:40
ヒロシ キタ━━━━━━(゚∀゚)━━━━━━ !!!!! て、いやちがうやん
-mfpmath=sse2やsse3って何で無いんですか? -mfpmath=sseで精度落ちちゃうのが嫌なんですが。
>>544 3.3.1だとerror: bad value (sse2) for -mfpmath= switchと言われます。
それとも、mfpmath=sseは-msseと同じ意味ってことですか?
ぶっちゃげ For i387 you need to use -march=cpu-type, -msse or -msse2 switches to enable SSE extensions and make this option effective. を訳して欲しいです
>>545 544じゃないが、違う。
-msseをすると、sse命令が使えるようになる。
-mfpmath=sseは、従来のFPU命令を出力する所をsseの
スカラー演算命令に置き換える。
余談だが、Pentium3では-mfpmath=sseは逆に遅くなる。
Pentium4では知らん。でも、劇的に早くなるとは思えん。
遅くなる理由は、単純にgccのsseスカラー命令のスケジューリング
がこなれてないせいだろうな。インテルコンパイラーの
出力と比べるとなんとなくそう感じる。
>>546 「i387のためにSSE拡張を可能にし、このオプションを効果的にするために
-march=CPUタイプ、-msee、または-msse2スイッチを使う必要があります。」
TECH I Vol.29 実例で学ぶGCCの本格的活用法 p.270
~~~~~~
直訳載っけておしまいはひどいよCQ出版さん・・・
こんくらいman読んだだけでわかるって・・・
$ マン ぐっしっし
直訳でも、あの量はかなりの労力だろうな。 和文になってるだけでも価値を認める人はいるし。
>>550 JM Project知らないの?
多少古いけどほとんど載ってるよ。
To have SSE/SSE2 instructions generated automatically from floating-point code, see `-mfpmath=sse'.
553 :
デフォルトの名無しさん :2005/11/08(火) 02:59:00
カトちゃんケンちゃんの空中面で死ぬってのはどうなのよ? 下手すぎじゃね?
554 :
デフォルトの名無しさん :2005/11/09(水) 00:08:10
gccでコンパイルするのとg++でコンパイルした場合の違いを教えてください。
>>554 C++であれば、リンク時に libstdc++ が自動的に入るかどうか。
better C
$ gcc -O3 icc.c -o icc
>>548 この本アマゾンで検索してもでてきませんね。ネットでは買えないのか?
それにしても、オプションの解説ばかり載っている本ですね。
だってオプションの解説の本だもの。 それはそれでいいんだけど、 ・Webで公開されている連載と変わらない ・実例がないのでman異常の価値を感じない ので買うほどの意欲が沸かなかった……。 発売前は期待していたのになぁ。
スレ違いの話題ですまん 4.1.0が出た
>>561 ソースとアセンブリが載ってるけど、あれって実例とは言わないよな。
買って損したと言い切ることは出来ないんだけども、
買わなくても問題はなかったと思ってしまう本だった。
>>562 http://gcc.gnu.org/ の Serious regressions のリンク先によると、
いくつかの「うんこ」な問題が復活してるみたいだね。
open for regression and documentation fixes only
らしいし、4.1.1を待つか。
前から疑問に思ってたんですけど、regressionってどういう意味ですか? 回帰とか退化とか辞書にはのってますけど。
>>566 前のバージョンに比べて、機能が低下したってことじゃない?
なるほど、バグで言ったら今まで問題なかったのが、新たに導入されたバグ 最適化だったら今までできてたのが、できなくなったとかことなのかな って書こうとしてたら、間に気持ち悪いレスがついた。 違うのかな?
570 :
567 :2005/11/20(日) 16:16:01
572 :
567 :2005/11/20(日) 17:06:49
>>571 バグに限った事じゃない。
今回も、最適化時のコード品質が低下したってのもあるし。
そんなこと言うから気になって見たSerious regressionsのページで、 Status ------ UNCO UNCO UNCO : : とか書いてて爆笑したw
574 :
デフォルトの名無しさん :2005/11/20(日) 22:12:50
UNCOってどういう意味? いやマジで
>>574 UNCOな奴の中に省略してないのが書いてある。
"UNCONFIRMED"だな。意味は「未確認」か?
とりあえず、「あんこ」って呼ぼうよ。
うんこー
CVSからSVNに変更になったんだね。GNUのいろんなアプリケーションは こっちをソース管理ツールとしてどんどん使っていくのかな。
>>574 そして、修正を割り当てられたのは「あっし」です。
UNCOをウンコと読むやつは、AHOをアホと読みそうだな。
gcc-4.1.0 はまだリリースされてないんだが。
>>577 gcc.gnu.orgは独立しとるからのう。
まあ、sourceware.orgに置いてあるのはまとめて移行になるので、
当分CVSじゃないかなあと思うが。
583 :
デフォルトの名無しさん :2005/11/21(月) 12:58:02
>>581 すまん、まだだったね。
久々に gcc.gnu.org いったら、トップに出ていたので、リリースされたと思っちゃったよ。
みんな、ごめん。
たしかに >Current release series: GCC 4.1.0 という表記は誤解を招きますな。 文句言ったところでAnnouncements読めといわれそうですが。
4.1.0が来るにしても3.4.5リリースして何週間か立ってからだろうなぁ
>>579 > AHOをアホと読みそうだな。
何か問題でも?
Caesarを「シーザー」ではなく「カエサル」と読むのと同じだろ。
全然違うわけだが。
588 :
デフォルトの名無しさん :2005/11/24(木) 22:37:02
パーサ(パーサー?)の話とかここでいいのかな? (他のスレあったら教えてください) 仕事で幾つかのフォーマットを読み下すプログラムを 書いてきたんですが、毎回使い捨てで同じような のを何度も書いている気がしています。 そこでパーサーと言われるプログラムの基礎を勉強しようかな と考えています。 情報系とか出てないので理論的な知識が無いんだけど、 基礎から書いてある良い本とか良いサイトないですか。 よろしくお願いします。
589 :
558 :2005/11/24(木) 22:39:13
コンパイラ・スクリプトエンジン というスレがありました。そちらの方が近いようですので そちらで聞くことにします。 ありがとうございました。
GCC = God Compiler Collection
FreeSoftware >>>> |越えられない壁| >>>> OpenSource >>>> |さらに越えられない壁| >>>> それ以外の物
つまりstallmanはフリーウェアは作ってもいいけどソース公開はしたくないよ、 と言っているのです。
壁を越えてきて欲しくない物>>>全く特徴のない作文のくせにサイド広告に刻まれた技術用語にあやかり検索上位ヒットするblog
>>595 今は検索にヒットさせるのも1つの商売になってるから
slashdotでもリリースされたと勘違いされた記事が載っちゃったんか。
結局オプソにしても一部の人間がメンテするのは同じ。状況は変わらない。 だったらソース公開せず技術流出を防ぐ方が大事だとストールマンも反省してるだろう。 バグレポだけで十分。
>>592 GCCを"open-source software"なんて言ったらrmsが怒るの当たり前じゃん。
GCCは"free software"なんだから。
いっそのことシェアウェアにしちゃえよ
>>599 >だったらソース公開せず技術流出を防ぐ方が大事だとストールマンも反省してるだろう。
君も適当な事言うね。
ストールマンはOpensourceよりももっとフリー(speech)にしたがってるんだよ。
言っておくけど
>>594 は大嘘ついてるよ。
>>602 大嘘っていうかネタだろう。
・・・ネタだよな? 本気で言ってたりしないよな、このスレ読んでる奴が。
そうだろう? そういってくれ、たq304ty e4gjkhz)'#W+)(YQW#NO CARRIER
NO CARRIERとはまた懐かしい。
>>599 >結局オプソにしても一部の人間がメンテするのは同じ。状況は変わらない。
>だったらソース公開せず技術流出を防ぐ方が大事だとストールマンも反省してるだろう。
>バグレポだけで十分。
バグレポだけ十分だと?
ふざけんな! 俺はメンテしたいんだ! ソースよこせ!
メンテする権限欲しかったら金払えよカス ってことだろ多分。
権力やライセンス、金絡みの話より
>>608 のような話のほうが重要なのによく騒ぐなぁ
お金は命より重いですよ。
>LLVM is distributed under the University of
>Illinois Open Source License, an OSI-approved license.
http://llvm.cs.uiuc.edu/releases/ ライセンスが違うものがGCCに入るの?
あくまでプラグインっていう形に留まるんじゃ。
>>611 ライセンス変更とかの話もちらほらあるみたいだけど,英語に堪能でないので
議論の流れがよく分からない。
>>610 お前以外の命よりは尊いだろうが、お前の命と金なら、お前の命の方が
尊いだろう。死んだら終わりジャン。分かったような口を聞いてんじゃネーヨ。
>>613 人は死んだら終わり。だが金は死なない。だから金は尊い。
とりあえず、人類の進化に逆らって物々交換で生活しよう。
616 :
デフォルトの名無しさん :2005/11/26(土) 22:48:19
死人は何も生産せずに 腐乱物体の処理費用を発生するからな
人間が自分で「人間の命は尊い」などと言っているようでは救いようがない
618 :
デフォルトの名無しさん :2005/11/26(土) 22:58:07
今までWindowsのVC.NETで開発していたCのソースを fedora core 3のgccでもコンパイルできるようにしたいのです。 VC.NETは、 #ifdef WIN32 で検出できるのですが、fedora core 3のgccが検出できなくて困っています。 #ifdef ???? の????に何を書けば良いでしょうか? よろしく。
__GNUC__か__linux__だったかな linuxは_linux_だったかも
よくあるのは MSVCの判定は #if defined (_MSC_VER) gccの判定は #if defined (__GNUC__) というのだろうな
621 :
デフォルトの名無しさん :2005/11/26(土) 23:21:19
ありがとうございました。 __GNUC__ ですか。試してみます。 実は、_GNUC_ は試してみたのですが、だめでした。 _linux_も検出できませんでした。 アンダースコアを二つつなげるのがミソなんですね。 ありがとうございました。
__hoge は実装用に予約じゃなかったっけ
623 :
デフォルトの名無しさん :2005/11/27(日) 11:25:15
4.1ってどこでダウンロードできるの?
いや、だからまだリリースしてへんて。
>>622 実装が定義してるマクロの話をしてるんだろ?
いや、snapshotsは新鮮でなければ。 まあリポジトリから直接取ってくりゃいいことですが。
GCCでtimeをインクルードさせるときってどんな風にコンパイルすればいいの??
そうです、time.hです。言葉足らずで申し訳ない。
OS・ディス鳥によって違うので一概に胃炎が #include <sys\time.h> とか書いたらまず通らないわなww ヘッダファイルそのものをファイルシステム内で検索してみたら?
やっぱ検索しかないみたいですね。ありがとうございます。試してみます。
>>633 time.hのあるディレクトリのパスを-Iで指定
>634 ありがとうございます。試してみます!
636 :
デフォルトの名無しさん :2005/12/07(水) 23:22:00
質問です。 gcc4.0.2で、sincosfを使うと hoge.c:55: 警告: implicit declaration of function 懼sincosf懼 hoge.c:55: 警告: incompatible implicit declaration of built-in function 懼sincosf懼 が出るんですが、この警告を出さないようにするにはどうすればいいんでしょうか? 実行は問題なくできます。 #include <math.h>と、-lmはちゃんとやってます。
637 :
636 :2005/12/07(水) 23:24:40
>>636 プラットフォームを書きなされ。
すくなくとも、標準CやPOSIXにはsincosf()なんてないぞ。
640 :
636 :2005/12/08(木) 00:32:32
>>640 FedoraCoreならsincosf()はありそうですね。
gcc拡張ではなくてglibc拡張ですよ。
で、gccに-vを付けてどこのmath.hを読んでいるのか確認、そのmath.h
にsincosf()は書かれているのかを確認。
642 :
636 :2005/12/08(木) 01:38:59
>>641 /usr/includeでgrep -r sincosf *したら、
bits/mathinline.h:350:__NTH (__sincosf (float __x, float *__sinx, float *__cosx))
という結果だったので、強制的に
#include <bits/mathinline.h>
したんですが、まだ警告がでます。
あと、確かにgcc拡張ではなさそうですね。だから、警告が出るんでしょうか?
うーん、よくわからないです。
gcc-3.x使えよ、禿げ。
644 :
デフォルトの名無しさん :2005/12/08(木) 08:06:01
「や…やめてください…」 「へへへ……ラップはもうビリビリだぜ、あとはフタだけだ」 「いやぁ! だめ、フタを開けないで…!」 「ひゃっはあ! なんて嫌らしいノンフライ面だ!」 「おいおい、スープの素が2袋もあるぜぇ、こいつ誘ってんじゃねえのか?」 「そ、そんなんじゃありません…!」 「『食べる直前に入れてください』だぁ? 待ちきれねえ、今すぐ入れてやるぜ!」 「や、やめてー! ま、まだお湯も沸ききってないのに…!」 「うはぁ、すっげえ、冷えてる油とかやくでグチャグチャだぜ…たまんねえ!」 「そーれ、お次はお湯だ! 中にたっぷり入れてやる!」 「あああ! ぬ、ぬるい…! ……て、れてえ!」 「聞こえねえなあ、はっきりいえよオラッ!」 「せ、線まで! きちんと線まで入れてくださいぃいぃ!!」 「残念だったなあ、俺は1センチ残す派なんだよぉ! ははは!」
sincosf()がホットスポットじゃないなら、-fno-builtinとかね。
649 :
636 :2005/12/08(木) 13:39:15
えーと、
>>644 は別人です。
>>646 それをやっても、
hoge.c:41: 警告: implicit declaration of function 懼sincosf懼
この警告がでちゃいます。
なんでか知らないんですが、FC4のヘッダーには宣言がないっぽいです。
ちなみに、x86のFPUにはsincosの命令があるから使ってみようかな
という理由なんですが。
650 :
646 :2005/12/08(木) 14:03:22
アホなの? inlineしたけりゃ、3.xを使えと書いただろ。 4.x使いたきゃ自分でasm文書け。 mathinline.h見れば簡単に書けるようになる。
何この糞コンパイラ >しかし、gc 4.xでは >(n*10)/10 != n >という条件は、どうやら 10/10 を先に計算して最適化して消してしまうらしい。
>>651 整数のオーバーフローチェックとか
実数の桁落ちチェックですか。
>>651 んなこたぁーない。
何か変な最適化オプション指定してんじゃないの?
すごい初歩的な質問でもうしわけありません。 gcc 3.3.2なんですが、最適化フラグに-O4とセットして コンパイルしたのですが、問題なくコンパイルできました。 でも、最適化フラグはO3までって書いてあります。 O4でなぜ、何もエラーなくコンパイル出来たのでしょうか?
-O157だっていけるぞ
657 :
デフォルトの名無しさん :2005/12/08(木) 20:41:54
オキソゾン ドキソゾン ドキュソゾン ←たぶんこれ
658 :
654 :2005/12/08(木) 21:11:43
>>656 マジですか!
俺、ついにプログラムにまで惚れられるようになったのか。
このまま頑張ればいつか二次元の女の子にも好かれる日がきますかね?
で、O3とO4のバイナリの実行スピードを調べたんですけれど、ほとんど変わらないです。
最適化フラグで間違ってO3以上が指定されると、
エラーも出さず自動的にO3がセットされると考えて良いのでしょうか?
>>660 そこまでひどいと、バグですな。今まで動いていたプログラムが動かなく
なる。
printf()をputs()で「最適化」するような処理系だしなあ
>>661 いや、意味が変わってしまう時点でどこまで酷かろうがバグなんですが。
unsigned intにしてないんじゃないの? 符号付きintだとオーバーフローは未定義だから省かれても文句言えないと思うけど。 #include <stdio.h> typedef unsigned int aint; //typedef int aint; aint aaa(aint n) { return (n*10)/10; } int main () { aint u; u = aaa(2000000000); printf ("%d\n", u); return 0; } 3.4しか持ってないから4.0では試してみて。
そんなもん、最適化以前にコンパイル時に警告かエラーではじけよ
666 :
636 :2005/12/09(金) 00:05:32
>>650 なにか勘違いをされてるようですが、gcc3.2でもちゃんと警告は出ますよ。
hoge.c:41: warning: implicit declaration of function `sincosf'
>>665 なにを弾くんだ?
乗算してるところ全部?
>>666 sincosfのマニュアルページに、使うためにはどうしたらいいかとか書
いてないかな?
669 :
デフォルトの名無しさん :2005/12/09(金) 01:25:38
g++の話しはどこで聞いたらよいでしょうか?
>>669 ここ。
GCC は GNU Compiler Collection の略で、g++ も含まれます。
>>651 >(n*10)/10 != n
正直、こんな糞なオーバーフローチェック書く奴の頭が疑問。
アセンブラならキャリーフラグ見るんだろうけど、Cだとどうするんだろう。
符号付きでオーバーフローがバグになるなら n > 2147483648 / 10 こんな感じで割っとけばいいんじゃない nが負だった場合を考えるともう一個書かなくちゃいけないのかな
gcc4が糞バグを修正すればいいだけ
gccがどういうconfigureオプションでコンパイルされたかを見る方法ってあります?
>>675 Cの規格上このコード(n*10)/10 != nがバグなんだが
679 :
676 :2005/12/09(金) 13:55:19
680 :
636 :2005/12/09(金) 14:06:14
>>668 #include <math.h>
ぐらいしか書いてないです。
>>671 FC4のgcc3環境が3.2なんです。
>>672 ポインターのアライメントをチェックするときに、
ポインターを整数に変換して、よくこんなコードを書くよ。
以下は、ポインターを、指定した境界に合わせるコードだけど、
gcc4で問題なく動いてるよ。
static void *get_aligned_address(void *pointer, int boundary)
{
if (((unsigned int)pointer) % boundary) {
return (void *)((((unsigned int)pointer) / boundary) * boundary + boundary);
}
return pointer;
}
>if (((unsigned int)pointer) % boundary) 引数とらずに4,8,16,32あたりの個別の専用マクロ作りなよ
オーバーフローしないし
ふつー & で書かないか?
>>681 のがどんなコードに落ちるか試したくなった。
漏れのオススメは (xxx) & -8 とかだが可搬性の罠に陥る罠。
>>684 >ふつー & で書かないか?
某CPUだと>> <<のが速かったな。
687 :
681 :2005/12/09(金) 14:53:30
>>684 それだと、アドレスの小さい方にアライメントされるから
あーやってしてる。
アドレスが小さくなると前の領域を破壊したり、確保されて
ない可能性があるから。
>>682 if文があるんで、マクロにするには気が引ける。
>>686 演算即値が指定できないプロセッサ?
x86 m68k mips arm だと即値ANDの方が速いような希ガスのだけど
詳しく教えて呉呉
>>687 あんたのコードでも小さい方にアライメントしてからboundaryを足してるじゃんw
>>687 実際には (((xxx) + 7) & -8) とかな。
昨今のプロセッサだと条件判断を入れない方がスマートだと思うが如何?
GCCネタから脱線してるが気にするな。
>>690 それかっこいい
ところで
>>681 のは除算を先にやってるから
期待どおりの結果が得られるのは当然な気もするけど
ifがあるからバグではないけどな
694 :
681 :2005/12/09(金) 15:22:09
>>689 えーと、結果的に小さくなる事はないんですが...
if (((unsigned int)pointer) % boundary) {
↑ここで、既にアライメントされている時はなにもしない。
return (void *)((((unsigned int)pointer) / boundary) * boundary + boundary);
↑これは、いったん端数を切り揃えてから、boundaryを足す、
つまり、次の境界に移動する。
}
>>690 それ、いただきます。ヽ(´▽`)ノ
>>694 そもそも、あんたが小さい方に云々言い出したのだよ(>687)。
で、あんたのコードも同じことをやっていると指摘したわけだ(>689)。
つまり、あんたの書いた「割ってから掛ける」のも「論理積でマスクする」のもおんなじこと。
だから論理積でマスクした場合も(既にアライメントされているときは条件で除外しているなら)
あんたのコードと同じようにboundaryを足すだけでいい。
まぁ、>690のように条件判断さえ要らないわけだが。
ちなみに、あんた流に割って掛けるならば、
return (((unsigned) pointer + (boundary - 1)) / boundary) * boundary;
でいいのだよ。
>>681 ってスレ違いの話題で内容もチョイボケ。スルーしなよ。
697 :
681 :2005/12/09(金) 16:35:49
>>695 ああ、スマソ...orz
何も考えずにレスしてたよ。
今にして思えば、なんでif使ってたんだろうなと...
自分が馬鹿なことは良くわかりました。ありがとうございました。
もう、スルーしてください。
ひょっとして、ゆとり教育世代の人ですか?
> ((unsigned int)pointer) この時点でダメだろ。 ふつー ((uintptr_t)pointer) だ。
uintptr_tが使えない環境も考えると、 何か適当な名前にtypedefするのが普通じゃないか。
701 :
デフォルトの名無しさん :2005/12/15(木) 10:14:49
>>700 typedefしても使えないものは使えないだろ。
環境依存なコードはifdefしか選択肢がない。
config.hでuintptr_tをtypedefしたりな。
uintptr_tはC99。 ないやつのために別の名前にするなんてナンセンス。
>>703 >>700 は別にナンセンスじゃないだろう。
自前で定義する物に、システム標準と同じ名前を使用するのは
あまりいい事でない気がするが。
まぁ、uintptr_tぐらいならどうでもいい事だが。
705 :
デフォルトの名無しさん :2005/12/15(木) 11:08:44
longでいいだろ。
どこに書いたらいいのかわからんのでここで質問させてください。 (該当スレあれば誘導おながいします。) 今Dual構成のマシンを使ってて、あるプログラムを 指定のCPUで動作させたいのですが、Win32で言う 「SetThreadAffinityMask」みたいな関数ってLinuxに ありますか? で、恥ずかしながら、gccってLinux(UNIX?)付属の 標準のコンパイラと思っててOK? Linuxもgccもどっちも初めてなもんで・・・orz。
>>706 >(該当スレあれば誘導おながいします。)
鼬害。
犬板へどうぞ。
>で、恥ずかしながら、gccってLinux(UNIX?)付属の標準のコンパイラと思っててOK?
バンドルされていますが、標準ではありません。
708 :
706 :2005/12/15(木) 12:53:12
大変失礼しました。 >犬板 どこですか? >バンドルされていますが、標準ではありません。 どもありがとうございます。m(__)m
710 :
706 :2005/12/15(木) 13:02:57
正確には犬糞板だけどな
712 :
デフォルトの名無しさん :2005/12/17(土) 02:18:15
#define ALIGN_ADDR(addr,align) (((unsigned char*)(addr))+align\ -((unsigned int)(addr)%align))
A happy new year!! GCC
なあ、いまさらなこと確認するんだけど、 GCCでビルドした、GPLなライブラリとは一切リンクしていない生成物は、 GPLにする必要ないよな? GPLなグラフィックツールで作った画像と同じ扱いだよな?
>>716 問題ない具体例: FreeBSDはGPLになっていない。
GPLを法的に遵守させた事例とか そのての判例ってあるんかね? 境界がグレー過ぎるし、GPL規約えげつない。
>>719 GPLがえげつないって?
著作権法のほうがえげつないだろ。
何の根拠も無く独占の権利が90年以上続くって、アフォかと。
721 :
デフォルトの名無しさん :2006/01/05(木) 12:17:09
>>719 >境界がグレー過ぎるし
Linux のドライバーの件とかね。
そのへんは技術の進歩に対応できていないだけでは? 緩やかなライセンスなら解釈で逃げられるんだろうけど。
>>686 & で書いてもアセンブラの>>,<<に落ちるときがある
特にソレを直後に配列のindex等に使うとき
LinuxはGPL_なんとかっていうマクロで外部に広く公開する関数と そうでないのを分けてなかった?
>>723 GPLv3は更に逃がさない方向で改正を考えてる模様。
GPLはcopyleft実現の手段。社会体制自体違うんだから、
無理に回避しようとかしないほうが身のため。
728 :
デフォルトの名無しさん :2006/01/05(木) 21:44:14
つーか、法の趣旨に反する行為を自覚しながら隙を狙うのは 掛け値なし泥棒だろ
マジGPL怖いな。 そのうちGNUのmathライブラリ使ってるだけでも ソースくれくれいわれそうだな
730 :
デフォルトの名無しさん :2006/01/05(木) 21:59:36
インターフェイス継承の趣旨についても怪しいときたか
>>729 バイナリをもらった時だけ、ソースくれくれするんだお ><
>>729 最初からGPLでソース公開してれば無問題
それがGPLクオリティ
GPLがUNIXをダメにしたと、 俺は思ってるよ
734 :
デフォルトの名無しさん :2006/01/05(木) 23:13:30
大学当局のサブマリンより質の悪い著作権大量強奪事案に対するアンチテーゼがどうかしたのかよ
>>725 EXPORT_SYMBOL/EXPORT_SYMBOL_GPLのことか?
GPL付きのは仕様が変わる可能性があるので、
そういう場合に自由に直せるようにソース晒しとけつー事だったような。
GPL違反が恐いならさ、ソース公開しちゃえばいいじゃん。 超〜簡単じゃん。
MicrosoftがXPのソースを公開しないのはなんでだと思う?
GPL違反が恐く無いんだよ。きっと。
ソースが汚すぎるから。
コメントとか変数名が卑猥すぎて公開できないから
そもそもソースが無い
GPL違反がばれるから。
軍との癒着がバレる
ソースファイルを記述した言語を公表できない
ソースコードがAAになっている。
「ひまわり」で書かれてるから
ちょっとだけ改良したものをGPLライセンスとされてしまう。
マジレスすると仕事でソフトを組むときはかなり気をつける
>>748 それが普通。
GPL を批判してる奴らは頭おかしいよ。ソースを公開したくなければ
GPL ライセンスのソフトを使わなければいい。嫌なら使わないなんて
小学生でも考えれば分かることだ。
使いたいのに使えないから GPL を批判してる奴なんかいてもごく少数だろ。 むしろ GPL の在り方に対する批判が殆どだと思うが。
自分の関知しないところでGPLライセンスのものが紛れ込んでしまう事が恐ろしい
睡眠プログラムかよ
サブマリンコードだな
754 :
デフォルトの名無しさん :2006/01/06(金) 10:33:39
IA32 (x86) でインラインアセンブラを使っているのですが、 gcc の asm においてイミディエイトは $12345 見たいに書きますよね? asm ("mov $123, %%eax"); asm ("mov 123, %%eax"); この両者は何が違うのでしょうか??
サブマリン特許のほうを何とかしてくれよ 後出しで訴えられたら回避不能 ライセンス調べればわかるGPLなんぞよりもはるかに悪質だ
GPLなんて最悪、コードをオープンにするだけのことだしなあ。
しかし自分の成果物の改良版をGPLで公開されると、そこから先の成果は Non-GPLなライセンスでは公開できなくなるわけで。 商用利用してもらうことは難しくなるし、そもそもどうしてもBSDLで公開したいという 原著作者の意向は果たせない。「自由」では無くなるわけだ。 まあ、同じことはGPLな人が言う、フリーソフトがプロプライエタリなソフトウェアに使われた場合にも 起こるわけだけど。
エロゲのGPL違反は、画像やバイナリも再配布可能になってるん?
貴様らまとめてGPLのスレへ池。 あと、GCCに付属のスタートアップはGPLの例外条項の範疇だから安心汁。 詳しくは「GPL "例外条項"」ググれ。
>>757 その手の揉め事がトラウマになって生まれたらしいからね。
|StallmanがEmacsのオリジナルバージョンを書いたのは1975年のことだが、
|1982年、James Gosling(そう、後にSunでJavaを設計したあのGoslingだ)が
|Emacsを全面的に書き直した(Gosling Emacs)。当初Goslingは、Stallmanや
|他の人々がGosling Emacsのソースを自由に利用することを認めており、
|また、Gosling自身も他の人々からのフィードバックの恩恵を十分に
|享受していたようだ。バザール・モデルの先駆けとでも言えようか。
|今となっては信じがたい話だが、この時点ではStallman自身、ソースが
|無料で手に入れば、細かいことはどうでもいいと思っていたふしがある。
|そんなわけで、StallmanはGosling Emacsに改良を加えるとともに、
|喜んでGNU EmacsにGoslingのコードを取り込んだ(1985年にリリースされた
|Emacs 15.34) のだが、その後Goslingがとある企業にGosling Emacsの権利を
|売ってしまい、しかもその企業がGoslingのソースの自由な利用を拒否して
|きたため、 Stallmanは問題の部分を一から書き直す羽目になった。
|この苦い経験から、口約束ではないきちんとした契約で、ソースが未来永劫
|誰でも自由に利用できるということを保証するという発想が生まれてきた。
むしろこのスレに妥当である
>>754 が無視されてる件について
>>761 gccじゃなくてx86アセンブラの質問ですからなあ。
>>754 mov imm,reg
mov mem,reg
763 :
デフォルトの名無しさん :2006/01/06(金) 18:12:34
>>762 ということは、
asm ("mov 123, %%eax");
って書くと123番地を読みに行ってたのか!
どおりでぶっ飛ぶわけだよ orz
いままで masm と Visual C++ のインラインアセンブラ
ばかり使ってきたから、オペランドの順序とか
clobber を明示的に指定しないとダメだったりとか、
もんげ〜苦労してる。
ワロタ
GCCで作った(Win32 Mingw)プログラムはGPL感染するんですか?
誰かワクチン作ってくれ
OpenBSDがgccを捨てる可能性ってある?
>>767 ライブラリによる。
つーか上でGPLの話が色々出てるけど、
GCCでコンパイルする事によってGPLが感染するとかは一切無いぞ。
GPLに限らずだけど、出来るバイナリにとってのソースが問題なわけで、
GCC自体はライセンス問題とはあんま関係無い。
プロプライエタリなソフトをGCCでコンパイルしててもそれ自体は何の問題もない。
includeはちゃんと確認しておこうな
libstdc++をリンクしたら?
例外事項ついてるだろ。ドキュメント読めよ。
773 :
デフォルトの名無しさん :2006/01/07(土) 12:07:52
llvmって結局どうなったの?
プロプライエタリを日本語訳してくれ
どうも。あえて日本語にしない理由でもあるの?
「プロプライエタリなソフト」ってよく使うからじゃ? カタカナ語は何でも許さない派?
議論が止まってるように見える>LLVM 英語がよく理解できないので、何がネックになってるのか読み取れなかったけど。
他にも類似は色々あるのに何でわざわざGPLでないものをって事が大きいわな。
C++なのも問題だったりする?
781 :
デフォルトの名無しさん :2006/01/14(土) 20:46:24
またまたGPLがらみだが、 gccの最適化で組み込み関数のインライン展開ってあるよな? その展開されるコードはやっぱGPLなんかな? だとするとライブラリだけじゃなくて最適化オプションにも 気を使う必要がでてくることに。。。 まぁ、strcpyだとかmemcmpだとかの短いコードだと 誰が書いても同じ様なコードに落ち着くから 権利主張される事はないと思うが。
>>782 > Microsoft Visual C++(あるいはVisual Basic)を使ったWindowsアプリケーションを書いているのですが、
> これをGPLの下で公開する予定です。
> GPLは、私のプログラムをVisual C++(あるいはVisual Basic)のランタイムライブラリと
> ダイナミックリンクするのを許可していますか?
> はい、なぜならランタイムライブラリは通常あなたがお使いのコンパイラあるいはインタープリタに付随するからです。
の逆パターンだな。問題無いよ。
GPL恐怖症な奴がここに来てるって聞いたのですっとんできますた。
GPLに関する話は専用のスレでやってくれよ。また荒れる。
788 :
デフォルトの名無しさん :2006/02/11(土) 11:11:46
#pragma once って gcc では使えないんでしたっけ? バージョンによっては使える?
いや、pragmaは普通「コンパイラ毎の拡張」だから、ANSIにはプリプロセッサにpragmaの キーワードを定義しているだけで、その文法や効果に定義はない。 gccでは、VCのpragmaは使えない。っていうか、Intel C++のpramgaも使えないし、 Sun Workshop C++のpragmaも使えない。逆に、gccのpragmaが向こうでは使えない。 また、たまたまpragmaが他のコンパイラで別の意味を持つこともある。移植の際に コンパイラを変えるなら注意が必要となる。 gccでpragmaを用いるなら #ifdef __GNUC__ #pragma foo #endif /* __GNUC__ */ と記述した方が良い。VCでも同様にVCの固有ディレクティブを用る場合、他のコンパイラ では評価されないよう保護すべきだろう。 (上記は、本当ならバージョンも絞った方が良い。なんせ、ローカルビルドやバージョンでも 機能が異なることがある) # 余談だけど#pragma onceの実装は、#inportの実装と並んで、一度rmsとNext陣営で # 揉めた事があったはずで、その後、Obj-Cとかでは両方実装されてたと思ったんだけど、 # C++では結局実装しなかったんだっけ?使って無いから良くわかんないんだけど。 個人的には#pragma onceは2行のコードと重複した宣言子の可能性を排除するが、コンパイラ 固有のコードになるという危険をはらむので、外の環境にコードを持ち出さない、社内開発の ような場所でのみ使うべきだと思う。しかも、再利用しないコードという、限定された状況で。 あと、個人開発とかかな。
790 :
デフォルトの名無しさん :2006/02/12(日) 10:24:22
ヘッダファイルの非標準な解釈を標準に合わせるために非標準の #pragma を使う滑稽な図式
>>788 あるけど、これから書くヘッダには使うな。
#ifndef _XXX_H
#define _XXX_H
ヘッダ本体
#endif
と書けばいいだけ。
>>789 長いよ。
>>790 ??
#pragma onceは非標準な解釈を標準に合わせる為にあるんじゃなく、
同じヘッダファイルの2度読みを避ける為の物だよ。
#ifndef __FOO
#define __FOO
ここにヘッダ本体
#endif // __FOO
の代わりだよ。で、
>>788 はgccで使えなかったっけ?って聞いてて、
>>789 は
知らんって答えてるだけなんだけど。(pragmaはコンパイラ毎に変わって当たり前
だろ、とも読める)
793 :
デフォルトの名無しさん :2006/02/12(日) 11:14:29
> ヘッダファイルの非標準な解釈を標準に合わせるために非標準の #pragma を使う滑稽な図式 は > > #ifdef __GNUC__ > > #pragma foo > > #endif /* __GNUC__ */ > > > > と記述した方が良い。 に対してだと思われ。
794 :
789 :2006/02/12(日) 11:29:09
>>791 > 長いよ。
ごめん。GPLの話題がちょっとつまんなくって、良い話題転換かな〜って思ったから。
795 :
789 :2006/02/12(日) 11:39:29
>>793 =
>>790 ?
すいません。言葉足らずだったかな。
> > #ifdef __GNUC__
> > #pragma foo
> > #endif /* __GNUC__ */
は、「gccなら#pragma fooを評価して、それ以外の場合は評価しない」って意味です。
ので、非標準な解釈(#pragma)をさせない為に、標準な#ifdefを用いてます。
「gccと、他のコンパイラで#pragma fooが存在し、しかもコンパイラによって解釈が異なる場合」
を想定しています。
ご理解頂けたでしょうか?
>>795 いや、解説されなくても
>>795 の内容は理解はできるんですけどね。
言葉足らずだったかな。たぶん
>>790 は
> 、非標準な解釈(#pragma)をさせない為に、標準な#ifdefを用いてます。
って書きたかったのを間違ったんじゃないかなと思います。
十分滑稽だし。
>>796 それを滑稽と思うのなら何故そう思うのか解説よろしく。
#私にゃ何故滑稽なのか判らんのでな。
pragma once に関しては
>>791 って書けば良いと思うから。
わざわざ pragma全般まで話を拡大したあげく、
pragma (この文脈では pragma once)を ifdef で括るのを滑稽だと思わない?
#ifndef _XXX_Hってデファクトスタンダードだけど、 ISO Cの規格には書いてないよね。
_で始めるシンボルってユーザが使っていいんだっけ?
801 :
789 :2006/02/12(日) 13:21:19
>>796 =
>>798 ?
なるほど。そういう事ですか。まあ、自分の解説もどきも滑稽ですが、
他人が書いた全く逆の意味のtypoを理解出来るなんて、すごいデスね・・・。
説明が長いのは、#pragma onceがC++共通の機能みたいに考えてるっぽかったので、
#pragmaの意味を
>>788 が知らないのかな〜と思った為です。
#pragma once自体がgccで機能するかどうかは、試せば一発ですし。
gccはこんなことも知っている。 > foo.c:1:9: 警告: #pragma once がメインファイルにあります do_pragma_once()が処理する。
803 :
デフォルトの名無しさん :2006/02/12(日) 14:12:07
>>796 >たぶん
>>790 は (中略) を間違ったんじゃないかなと思います。
ちげーよ
間違ったんじゃなく、ある仮定を1つ言ってないだけさ
ある仮定ってなんだよ。また、テレパシー系かよ。
>>800 たしかANSIでは、
1.2重のアンダースコアを含む大文字の名前
2.アンダースコアで始まる名前
は、(コンパイラの)実装に予約されてる。
805 :
デフォルトの名無しさん :2006/02/12(日) 15:33:52
国際規格ではなくアメリカ国内規格を引用している誰かさんも 手元にない規格票をテレパシーで読んでるのと違うのか?
>>805 手元に無いよ。テレパシーは無いけど、記憶を辿った。以前の仕事で、コーディング規約に
あったし、Mozillaの移植性ガイドにもある。おまけに、ANSIやらISO関連はググれば出てくるし。
17.4.3.1.2 のGlobal names。ISOも同じ項目番号みたい。
で?ある仮定ってなに?テレパシー無いんで、分からんのよ。
# ここでいってる「テレパシー」ってのは、テレパシー持ってないと分からないような
# 「足りない」レスの事。初心者質問スレで良く見かけるアレ。
807 :
デフォルトの名無しさん :2006/02/12(日) 23:30:25
おまえさんの国ではコーディング基準を ANSI というのかい? 半日近くググったばかりで悪いがもうちっとがんばれな >ある仮定
仄めかし気違いは無視するに限ります。
>>807 うん。ニホンでは、良く「ANSI準拠」と「ISO準拠」って言うよ。C++は普通にANSI/ISOで
標準化されてるしね。Cの時もまずANSIで標準化されたし。
あと、さすがに休日に2chの為に半日もググったり張り付いたりしねって(w
普通出かけるだろ。飯も食うし。
「ある仮定」は、もうどうでもいいや。ただの負け惜しみっぽいし。
>>808 了解。(・∀・)
811 :
デフォルトの名無しさん :2006/02/13(月) 00:51:47
CはANSI規格がそのままISO規格になった最初の言語規格じゃない?
813 :
デフォルトの名無しさん :2006/02/13(月) 01:36:01
コーディング規約にはなってないけどね
粘着うざ(w
>>813 コーディング規約なんて、会社毎、プロジェクト毎に異なる可能性のあるもんじゃねーの。
一人だけageてるから、分かりやすいな・・・。
age
,j;;;;;j,. ---一、 ` ―--‐、_ l;;;;;; {;;;;;;ゝ T辷iフ i f'辷jァ !i;;;;; コーディング規約さえ守ってれば見やすくなる ヾ;;;ハ ノ .::!lリ;;r゙ `Z;i 〈.,_..,. ノ;;;;;;;;> ,;ぇハ、 、_,.ー-、_',. ,f゙: Y;;f そんなふうに考えていた時期が 〜''戈ヽ `二´ r'´:::. `! 俺にもありました
820 :
デフォルトの名無しさん :2006/02/18(土) 04:04:52
でも、コーディング規約にのっとって無いソースは大抵汚いよな
>>820 最低インデントをハードタブにするかソフトタブにするかだけはそろえて欲しい。 ごちゃまぜに
すると開けるエディタ環境によってインデントが全然ちがう。
そういやJava API のソースは4タブで開くとボロカスだな。 8タブにして表示すると見た目が4タブという、なんてあほなことするんだSunは。
>>823 ちげーよ
ある仮定を1つ言ってないだけさ
ワロスwww
>>790 ,803 に良く似た奴が最近 C++ 相談室で暴れてた。
OpenMPをgccにで使うためにインストールしたいのですがgoogleよyahooでぐぐって見たもののよくわかりません。 どなたか教えていただけないでしょうか?解説してあるサイトでもかまいません。
GCC 4.1.0
今度こそリリースなんだね?
独自拡張で構わないのですが、gccでプロパティは実現できますか?
プロパティって何?
834 :
デフォルトの名無しさん :2006/03/02(木) 13:07:46
4.1は最適化が気合い入ってるぽいね
835 :
デフォルトの名無しさん :2006/03/02(木) 15:55:15
>>831 gcc4のSRPM作ったので、物好きな方はどうぞ!
ftp://sea-mew.jp/srpms/ /usr/bin/gcc4 や /usr/bin/g++4 とかいう名前で入りますので、gcc(3.x.x)と共存できます。たぶん。
>>832 昔、BorlandのC++で見たけど、クラスのメンバ変数への読み込みや書き込みを、メンバ関数でトラップできる機構じゃなかったっけ?
変数の値域を厳密に決めたりできて便利だった。
Javaみたいにgetter/setterを書く慣習を適用するべきなんじゃないの。
837 :
デフォルトの名無しさん :2006/03/02(木) 20:41:38
>>836 却下
データメンバの数に比例する単純作業はお世辞にも見習うべきものじゃない
かつてオブジェクトの数に比例していた単純作業のように選択的な自動化があるべき
>>837 単純に自動化なら、フィールドに対するGet/Setを挿入する
スクリプトやツールを使うって手もあるけど。
839 :
デフォルトの名無しさん :2006/03/02(木) 21:28:17
>>838 MFC のメッセージマップみたいにか? やめてくれー
Perl でコンバータでも作ったら?
>>837 その意見は一般論としては正しいが、
オブジェクト指向風味でもつきつめると所詮は高級アセンブラなC++では
最終的な実装はユーザに見えるレベルに持ってこざるを得ないから、
836みたいにならざるを得ない。
その意見を通すためには、プログラマが生のC++より一段高いレベルを
触るようにしないと。
842 :
デフォルトの名無しさん :2006/03/02(木) 23:02:02
>>841 まあな
ただでさえ「隠れたコード」が気持ち悪〜い「C の拡張」にこれ以上なにかをってのには確かに抵抗はある
そこをガラス張りな雰囲気を壊さずに選択的な自動化をうまく導入して貰いたいわけだが
あのツルピカにそれができそうかどうか、楽観的にも悲観的にも考えられる
C++ なら getter/setter だなぁ。
>>837 の言うことはもっともだけど IDE やエディタで自動挿入すればいいわけだし、
機能提供のためならともかく、開発者側の都合で独自仕様を使うのは、かなり抵抗がある。
独自拡張しろとか言ってる奴ら!禿の努力を無駄にする気か!
別に便利なら禿の事なんか気にしないびょ〜ん もっと出来のいい拡張があるならすぐにでも乗り換えるびょ〜ん
Propertyは便利だけど、C++の設計思想には全然合わないな。 templateとmember pointerで頑張れば、作れるかな? 一応C++0xに ICF, implicitly-callable function ってのが提案されてはいるのだが。
いいね ...Dなんて使う気にはなれんが
むしろ__finallyが欲しい
>>849 禿からの伝言です。
つ[デストラクタ]
あんま禿、禿、言ってると消されるぞ。
x86でC・C++から呼ばれる関数を自分でアセンブラで書きたいのですが、 レジスタは全て使っていいんでしょうか? これのレジスタはこの値を保持するのに使われるから勝手に破壊しちゃ いけないとかありますか? とりあえずセグメントレジスタはまずそうですが。 OSはWindowsとLinuxを考えていますが、OSによっても変わるんでしょうか。
857 :
デフォルトの名無しさん :2006/03/05(日) 16:51:22
以前のバージョンとの性能比較が見てみたい。
どのようなものをコンパイルしてどのようにテストすればいいか教えてください。 例えば、でいいので。どんなものがテストによく使われますか?
ubuntuのカーネルgcc4.1でコンパイルしようにもエラーが もっさもっさわっさわっさもじゃもじゃ沸いて出てくるよw うーん、簡単なプログラムでしか試してないが最適化 いいんだがオブジェクトでけぇようなきがしてならない
>>858 ちげーよ
ある仮定を1つ言ってないだけさ
862 :
デフォルトの名無しさん :2006/03/06(月) 22:09:56
べっちょ偉そうな教えてクン再臨のようだな >よほど不服だったらしいぜw
863 :
さくら :2006/03/07(火) 00:58:17
ある仮定ってなに?
バカの一つ覚えだから気にするな
866 :
デフォルトの名無しさん :2006/03/09(木) 10:47:19
gcc/g++ で、ヘッダにて inline で定義されている関数を、 inline ではなく関数呼び出し「させる」ように強制する ことってできますか? でもそうすると、当該 inline 関数を含むヘッダファイルを インクルードしているすべてのオブジェクトで 重複してしまうから、リンカが泣く?
-finline-limit=0 とか?
ヘッダーファイルで #define inline static として、コンパイルオプションで -fno-inline
-Dinline でよくね?
872 :
デフォルトの名無しさん :2006/03/09(木) 21:59:11
リンクでコケね?
874 :
866 :2006/03/09(木) 23:12:20
みなさん、どうもありがとうございます。
static inlineと宣言されてたら#define inline staticだと static staticにならね?
876 :
デフォルトの名無しさん :2006/03/10(金) 09:11:13
なるねえ あーゆー邪道なやり方じゃなくちゃんとした正攻法があるのにどうかしてるよ
877 :
デフォルトの名無しさん :2006/03/10(金) 10:12:14
お前らにちょっとお伺いします。 g++ に食わせるソースコードの文字コード (コメント、および文字列リテラル)って、なんでしょうか? 今までは ASCII オンリーで書いてきたんですが、 人からもらったソースに大量の日本語コメントと 大量の日本語文字列リテラルが含まれています。 Windows で動いていたソフトウェアのコードらしくシフトJISです。 シフトJISのまま g++ に食べさせてみましたら、次の箇所で コンパイルエラーが発生しました。 【ソースコード】 ///仮想関数なので子クラスで置き換え可能 virtual double foo(const Phase phase) { 【エラー】error: `phase' was not declared in this scope 原因が分からなかったんでコメントの後に改行を 入れてみましたらコンパイルが通りました。 【ソースコード】 ///仮想関数なので子クラスで置き換え可能 ←改行してみた virtual double foo(const Phase phase) { 【エラー】なし 「能」という文字がやばいのか。全部コメントを英語に直すのは 面倒だし、コメントを削ってしまうのもいやなので、 とりあえず nkf に通そうと思っているんですが、 変換後の文字コードは何にすべきでしょうか?
localeをSJISにして食わせれば受け付けないか?
879 :
デフォルトの名無しさん :2006/03/10(金) 10:21:40
>>878 あり、そうだったんですか。
横着して、というかさっきソース渡されて、
その場にUNIX機がなかったんで、
cygwin の g++ で試してみたら上記のエラーが。
cygwin でのロケールの扱いなんてさっぱり知らないんで、
まじめにUNIX機でロケールいじりつつ試してみます。
880 :
879 :2006/03/10(金) 10:33:04
Shift JIS 能 = 0x945c どうみても 0x5c = '\' です。 本当にありがとうございました。
881 :
デフォルトの名無しさん :2006/03/10(金) 10:57:22
痛いソースが回ってきたわけか・・・ ご愁傷様
昔は日本語のみの独自拡張mbchar.[ch]があったんですが、 今はiconvを使うようになっているので、 -finput-charset=CHARSET してください。 -fexec-charset=CHARSET -fwide-exec-charset=CHARSET もあります。(ただしiconvなしでcompileされると無効になっています) 今時Shift_JISだからどうとか言っている人の方が痛い。
883 :
デフォルトの名無しさん :2006/03/10(金) 11:19:45
charset が何であろうと根底に流れる痛さは変わらない
>>879 つ[sed -e 's-\(//.*\)$-\1.-']
885 :
879 :2006/03/10(金) 12:46:31
>>882 THX
駄菓子可視、-finput-charset=cp932 すると
Boost で使えないヘッダ続出。
Boost はコメントに非ASCII使いまくり orz
886 :
879 :2006/03/10(金) 12:51:14
ファイル単位でなく翻訳ごとにしか文字コードを指定できないGCCも 悪いんだけどね。
そういう物のソース中にlatin書いてる奴の責任は?
889 :
879 :2006/03/10(金) 20:18:06
彼らにとってはヨーロッパがすべてだから
890 :
デフォルトの名無しさん :2006/03/10(金) 20:19:34
LGPLってGNUの理念に反しているように思えるので ライブラリも含めてすべてGPLにすべきだと思うんですがいかがでしょうか?
GNUの理念を信奉するならそうすればいいんでは。 別にGNUマンセーでなく、LGPLの条件がまあまあ具合がいいやという 感じで選んでいる人も沢山いるでしょうよ。
>>890 そんなことしたらGPLが自滅しちゃうじゃん。
GPL議論スレへどうぞ。
自治スレへどうぞ。
895 :
デフォルトの名無しさん :2006/03/11(土) 10:14:54
GPLってグラップラーバキの略だよな?
GPLはグレートパートナーリナクスの略だよ。 LGPLはリトルグレートパートナーリナクス。
GPL は グレート パクリ ライオンキングの略。
Gcc Cannot Compile
GCC=ぐっしっし
4.0.3が出てた
3.4.6も出てたよ
どっちかひとつにしなさい!
2.95と3系が並存してるように、3系と4系が並存していくのかな。 めんどくさいね。
2はもう終わりだと思う
linuxのkernelも2.95捨てたからね
906 :
デフォルトの名無しさん :2006/03/14(火) 06:33:39
カーネルのビルドの時だけ 2.7.2.3 使ってた昔なつかし
ver.4以降って新しいtemplate構文に対応してますか?
>>907 新しいtemplate構文?なにそれ?
>>908 #include <stdio.h>
class Test
{
public:
template < int _Size >void func( void ) { printf( "default %d\n", _Size ); }
template < > void func < 4 > ( void ) { printf( "%d\n", 4 ); }
};
main( void )
{
Test t;
t.func< 6 >( );
t.func< 4 >( );
}
こんな感じの構文です
>>909 部分特殊化ね。4.0 どころか 3.3 でも使えるけど。
間違えた。explicit specialization だから、明示的な特殊化だった。
>>909 #include <stdio.h>
class Test
{
public:
template < int _Size >void func( void );
};
template < int _Size >void Test::func( void ) { printf( "default %d\n", _Size ); }
template < > void Test::func < 4 > ( void ) { printf( "%d\n", 4 ); }
int main( void )
{
Test t;
t.func< 6 >( );
t.func< 4 >( );
return 0;
}
直すんだったら、ついでにヘッダも iostream か cstdio にしてあげなよ
アッと驚く糞レスだな
こういう文法です。 translation-unit declaration-seq declaration+ block-declaration function-definition template-declaration explicit-instantiation explicit-specialization ←これ linkage-specification namespace-definition そしてexplicit-specializationはここにしか出てきません。 そのコンパイラは勇み足。
TextSS のWindowsXP(Professional)64bit化おながいします もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
>>918 ちげーよ
ある仮定を1つ言ってないだけさ
Linux (Fedora Core 4) で gcc 4.0.2 を使っているが、なんで getpgid() の プロトタイプ宣言がないんだ? __getpgid() ならあるんだが。(ヘッダの中での #define忘れ?)。しかも man では unistd.h だけの include だけでよさそうに 書いてあるが実際には pid_t を使うので sys/types.h も include する必要が ある。
922 :
921 :2006/03/22(水) 13:59:47
すまん。謎は解けないけど一応自己解決。man の下の方よく読んだら _XOPEN_SOURCE と _XOPEN_SOURCE_EXTENDED を両方 define すれば いいと書いてあった。(なんでまたこんなことを…)
過去の遺物。 どうでもいいことかもしれんがgccは関係ないぞ。
gcc で DLL の遅延ロードについてお尋ねしたいのですが、 VC では delayimp.lib と /DELAYLOAD が利用できますが、 gcc にも同様のオプションはあるのでしょううか。 環境は MinGW + gcc 3.4.2 です。
>>924 つ [LoadLibrary]
つ [GetProcAddress]
基礎的なところでつまってしまいました。 c言語の範囲内でとあるプログラムhoge.cを書きました。ただし、ライブラリ(libhoge.a)にリンクしています。 gcc hoge.c -lhoge みたいな感じで問題なくコンパイルできました。 ところが、C++で書き換えようとして、中身を変えず、hoge,cをhoge,cppとリネームして、 g++ hoge.cpp -lhoge としたとたん、コンパイルは出来ますがリンカエラーがでました。 libhoge.aに入っている関数がリンク出来ないといわれてしまいます。 原因は何なのでしょうか?どうしたらいいのでしょうか。何も変わってないはずなのに・・・
927 :
デフォルトの名無しさん :2006/04/08(土) 20:52:55
928 :
デフォルトの名無しさん :2006/04/08(土) 20:56:36
単に名前の変換が C と C++ で違うからじゃないのかな。 libhoge.a も g++ でリビルドすればリンクできる。
>>926 C++では同じ名前でも引き数が違うだけの関数が存在し得る。
このため、実際のコードモジュールでは型を加味した名前で関数を参照することになる。
処がlibhoge.aは今まで通りCの名前で作られているのでリンクできないことになる。
こんなときは、
(hoge.hにlibhoge.a内のエントリ関数の宣言があると仮定して)
extern "C" {
#include "hoge.h"
}
とすればいい。
930 :
デフォルトの名無しさん :2006/04/08(土) 21:00:50
gcc でビルドした libhoge.a と g++ でビルドした libhoge.a を nm libhoge.a して見比べればなんで怒られるか分かると思う
>>927-930 ありがとうございました。名前の変換がCとC++で違うということがあること事態に気づかなかったですよ。3時間も無駄にしてしまった・・・
結局、
extern "C" {
#include "hoge.h"
}
の方法で解決しました。
GCCを使うにはCygwinというのをいれないといけないのですか? 私としては、コンパイラのみほしくて、できればGCCで 時にDOS用EXEを作ったり 時にSHというCPU用のバイナリを作ったりしたいのです。 現状はBCC5.5やSHCというコンパイラを使ってますが、GCCのみでできますか?
>>933 それは違うと思うが
>>932 Windowsでやるならやっぱりcygwinがあったほうが良いかと
んで、crosstoolを使えばSH用のgccは簡単に作れる
今のgccがMS-DOS用のバイナリが吐けるのかは知らん
gccだと、雑誌やwebのサンプルからしてLinux系の環境前提に 解説することが多いから、特に理由がなければCygwinごと 導入したほうが、いろいろ幸せなことが多いとおもわれ。 DOSのバイナリをgccで作れるって話は漏れも聞いたことない。 libbdfがOMFのサポートするとかしないとかでもめてた記憶があるから 現状は無理なんじゃないかなー。 SH用のgccはルネサスあたりが出してたりしないのかな? よく知らんけど。
まあBCC5.5もDOS用のEXEは作れないんだけどな。
たぶん
>>932 がわかってないだけだろうけど。
Cygwin導入の際にデフォルトでインストールしてる?それともフルインストール? フルだと1GB超えてるんだよね・・・USBに入れるのがちとつらい
939 :
デフォルトの名無しさん :2006/04/09(日) 08:58:04
必要な物だけチョイスして入れるという発想はないの? 俺はとりあえずデフォルトでインストール。 その後必ず追加するものは X, openssh, gcc, boost, vi あとは好みで。
dosエスクテンダ前提になるけど、djgppは今でもアップデートされているらしい。
GCCのC++静的ライブラリの話です。 ライブラリのインターフェースはABIで規定されているので、 バージョンが異なるコンパイラで作成された静的ライブラリを リンクすることもできると思います。 (ただし、ABI自体が仕様変更された場合は除く。3.2->3.4移行時が該当?) できるはずですが・・・原因不明でうまくリンクできなかった or リンク後の動作がおかしくなった経験ってありますか? 参考までに聞かせてください。
どううまく行かなかったか書け
>>939 それにあと、more, fetchmail, rsync, doxygen, cvs辺りお勧め。
#つーか、事実上自分が入れているのを書いただけだな。
>>943 これからはじめるところです。
自分でライブラリをユーザーに配布するのですが、それに
先立って、注意点を調べたかったのです。
946 :
デフォルトの名無しさん :2006/04/09(日) 11:10:00
>>941 すごいよな、あの熱意。
>>944 まぁ漏れはメインで使うと言うよりは
Visual Studio から make 呼び出して
コンパイルしてるだけだからなぁ。
VC++ べったりだとポータビリティのない
コード書いちゃうことが多いから、
とりあえず g++ -Wall してみてる。
947 :
デフォルトの名無しさん :2006/04/09(日) 11:26:47
そういう目的で使うなら GCC より Borland のが「うるささ」で勝っているな 俺も結局、OR 条件を意図して持ってるコンパイラ全部使うけど
>>942 > できるはずですが・・・原因不明でうまくリンクできなかった or
>>945 > これからはじめるところです。
(゚Д゚)ハァ?
949 :
デフォルトの名無しさん :2006/04/09(日) 11:40:02
>>947 そうか、 bcc のほうが「うるさい」か。
bcc は昔つかってたんだけど、テンプレートの挙動で
不審な点があったので(当時の俺のテンプレートに対する
理解不足から来た勘違いかもしれんが)、使わなくなっちゃった。
あと、俺にとっての最低限のポータビリティは
Linux でコンパイルできるってことなので、
g++ でいいや、って感じで使ってる。
まぁ boost が使えない環境ってのは組み込みでもない限り
考えづらいので、boost にはべったり依存しちゃってるけど。
>>948 × リンクできなかった orz
○ リンクできなかった ot
そういや、BCCはタイプリストすら作れなかったな。勿論他の処理系ではコンパイル可能なコードで。
-lpthreadをつけてコンパイルされているかどうかで、コンパイルするコードをifdefか何かで切り替えたいのですが -lpthreadをつけてコンパイルされているかどうかを判別するにはどうしたらよいのでしょうか?
リンカに渡すオプションをソース上で判定できるコンパイラなんて無いだろ
>>952 -v -pthreadしてcc1の引数で何が#defineされているか調べてみろ。
>>952 ソースファイルに
#ifdef HOGE
(オプションに-DHOGEがあるときにプリプロセスさせる処理)
#endif /* ifdef HOGE */
#ifndef HOGE
(オプションに-DHOGEがないときにプリプロセスさせる処理)
#endif /* ifndef HOGE */
とか書いてMakefileで
gcc ソースファイル -DHOGE -lpthread
gcc ソースファイル
とかで分けるのはダメでしょうか。
specに-mpthreadとかをねじ込む
957 :
デフォルトの名無しさん :2006/04/13(木) 10:40:10
そういや spec っていじったことないなぁ。 spec いじると、エラーメッセージのフォーマット変えることってできます?
>>957 specs? のことなら、できない。そもそもspecsは
optionの暗黙的ルールの追加や、排他チェック等を行ってるだけ。
specsの書式ってものすごい奇抜に見えるけど 誰が見ても構文がわかるよね、ドキュメント無しでいける あれは不思議だ、可読性とはなんなのかわからなくなる
>>958 あ〜そう、specs のこと。
エラーメッセージとかまでいじれるようなものじゃないのか。
あきらめて sed でフィルタ書くわ。
961 :
デフォルトの名無しさん :2006/04/16(日) 00:38:30
962 :
デフォルトの名無しさん :2006/04/18(火) 17:59:33
963 :
デフォルトの名無しさん :2006/04/18(火) 20:07:31
そいうえば、あの凶悪な型チェックを搭載したGCC4はもうバージョン上がったのか?
965 :
デフォルトの名無しさん :2006/05/05(金) 14:45:23
966 :
デフォルトの名無しさん :2006/05/09(火) 14:49:03
4.1.1マダー?
967 :
デフォルトの名無しさん :2006/05/09(火) 15:04:42
埋めなくても落ちるからほっとけ
埋めたら見られなくなる人もいるし放置でいいんじゃねーの
逆 埋めずに落ちると過去ログに残らない
_.,., --''." ̄゛゛゛- 、 , -'´ ゙ー- 、 ,,//// /,// ゙ヽ ,イ ///// /ソソ// ィ/ ゙|,,,,..,、 ノ゙、 イノ从/,/ / イ//リ// //゛゛゛'ヾ.,lii トヽy'从゙、 !ハ从! l! i! i! il i li il! / リ l l 从ヾil lk i iハi l! il! lilハl>k从 イ, _,,..ィチ 从i li il! ll!リ ゙ミ il!从(( ::: )ハl <( ::: ) Yイ l / i! il リ ,,,彡爪ハ ミ -'" _____ `"-イノ /リ////リ ////从从ミ [  ̄カ 彡ノノ/イ/// ./////////ハ从ヽ、`ー-'_,,彡彳/リ///リ : ' //イ iハリ´リ ___゛77' "/////ソリ lリ lソリ _∠派、 / ///ィ"/从 ハノ リ ,/ ヽトミ、__lミイ // /ソ< ̄ト, ┏ __上_ / 、、 /_____ l,ゝ<゛<イノハノ リ ゛i l l. ┃口 | 七 ' 7二 ヽヽ/ | | | .|\ /,.==、>" ゝ /" /-- 、 ノ/ l ノヽ||/ / 、_ ./ 。 。 。 ┃ |/ k"ァ-y".: /l /ァ==ミヽ / / l  ̄ ̄ ┛ lイ 〔ミ::" ,,ノ |(/⌒ヾ、ミV" ト-" | ヾミ彡"// ! / ! i Y゛"-.y" /i/ i_/ ! ト-t-y" /彡"ノ/ l .| l./ / ヽヾ、 | l l/ イ ゙', ', ',,、 ! ! レ' / i ', ', ',', l l"/ /、 ! ', ', .',', l iノ イ ゙i ! ', ', ',', / ./ ! l i ', ', ',', i i |、 l ! ',. ', ',', ヽ. キ '丿! i ',. ', ',', | l゙ヘ、__>-t" '! i ',. ', ',',
とりあえず980までいっとくか
ksk
>>971 どこからそんなデマを仕入れてきたんだい?
でもこの板、過去ログになるのが遅いんだよな…
●買うしかないか。 しかし●とモリタポってなんで統合されないのかね。 公式 p2.2ch.net のためにモリタポ買って、 DAT落ちスレのために●買って、なんてやってられん。
-Wbug
-Wdeathmarch
>>981 そのオプションつけたら、嵌まっているプロジェクトがうまく逝きました。
本当にありがとう! > GCC
>>980 そのオプションつけたら、見つけられないBugをうまく探せました。
本当にありがとう! > GCC
-W2ch.net
>>984 そのオプションつけて仕事してたら、会社を首になりました。
本当にありがとう! > GCC
-Worz
>>986 そのオプションつけて仕事してたら、後輩がバグを量産してくれました。
本当にありがとう! > GCC
-Wktk
>>988 そのオプションつけて仕事してたら、コンパイルが終わりません。
本当にありがとう! > GCC
-ωおいなりさんだ
991 :
デフォルトの名無しさん :2006/05/18(木) 22:26:45
うめ
うめさせるわけにはゆかぬ!
なんだと!!
994 :
デフォルトの名無しさん :2006/05/18(木) 23:10:59
おまえら馴れ合ってんじゃねーよ
996 :
デフォルトの名無しさん :2006/05/18(木) 23:45:40
うめ
997
たけ
999 :
デフォルトの名無しさん :2006/05/18(木) 23:58:47
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。