cygwin + mingwn + gcc 相談室

このエントリーをはてなブックマークに追加
726デフォルトの名無しさん
組み込み系のCPUで、GNU-C or C++を使ってプログラムすることになったのですが、
OSを載せないため、bootコードを書くことになりました。
(cygwinはクロス環境として使います)
アセンブラやハードの知識、基本的なC,C++に関してはわかっているつもりなのですが、
bootコードにハードウェア初期化以外に何を書けばいいのかわかりません。

とりあえず.bss領域はゼロクリアすればいいことまではわかったのですが、
C++のコンストラクタ実行やライブラリの初期化等、main()まで行くまでに
何をすればいいのか、どこかに良書や資料ありませんか?

今日一日ググったり本屋行ったのですが、どこにもなく・・・どなたか助けてください。
727デフォルトの名無しさん:2005/05/06(金) 21:02:56
>>726
「エスパーきぼんぬ」をググるといいかと。
728デフォルトの名無しさん:2005/05/06(金) 22:38:17
>>726
いわゆるスタートアップルーチンだよね?
やらなくてはいけないことはマイコンにもよるけど、
スタック設定
割り込みベクタ設定
ROMエリア初期化
DATAエリア初期化
BSSクリア
main呼び出し
でそ
ちなみにBSSクリアは必須ではない(不定になるけど)
729デフォルトの名無しさん:2005/05/06(金) 23:27:54
>>726
適当なアーキのcrt.oでも読んだらどうかな?あとGCCのinfo。
730デフォルトの名無しさん:2005/05/06(金) 23:33:44
>>728
726が聞きたいのは例えばatexitとか、構造化例外処理とかの
色々な準備(C/C++のライブラリ初期化手順)の希ガス。
731730:2005/05/06(金) 23:44:58
最低限でmallocやnewもいらんというなら、728のやり方で
自分のことだけ考えてればそれでもよいが。
732デフォルトの名無しさん:2005/05/06(金) 23:48:27
>>726
環境構築のために必要なコード(ブートローダ)と、そのプログラム実行のために必要なコード(スタータップルーチン)は区別しておけよ。
仮令OSがないとしても、前者と後者を分けておくことはデバッガ(もしくはモニタ)を作るときにも役に立つ。
733726:2005/05/07(土) 00:34:18
みなさん。ありがとうございます。

>>728
 C言語で標準ライブラリ等無しなら、それで行けるはずですよね。
 確認できて良かったです。
 ところで「ROMエリア初期化」と「DATAエリア初期化」というのは何でしょう?
 .textと.data(だったっけかな?)に何らかの初期化が必要という事でしょうか?

>>729
 crt.oというとオブジェクトファイルですよね。
 crt.o自体の役目を知らないのですが、これは何でしょう?
 GCCのinfoにはもう一度目を通してみます。

>>730
 いや、まさにそのとうりでございます・・・
 mallocやnewのメモリ動的割付に関しては今回は見送る(禁止)
 させる予定ですが、全般的にはそのような事です。

>>732
 アドバイスありがとうございます。
 というと、私がわからないのはスタートアップルーチンという事に
 なるのでしょうか。
 728さんが書いてくれた割り込みハンドラの初期化などHWに近い部分は
 何をするかわかっているので。
 ※ちなみに今回はICメモリにプログラムがすでに展開されているため
  ブートローダは書かなくて済みます。
734726:2005/05/07(土) 00:34:45
書いていて整理がついてきました。私がわからないのは
1. .ctors .dtorsセクションにあるコンストラクタ、デストラクタを
  スタートアップルーチンでどう処理すればよいのか。
2. その他気をつけるべきセクションはあるのか。
3. ライブラリの初期化は何かルールがあるのか。
という事です。
735デフォルトの名無しさん:2005/05/07(土) 01:00:04
>>734
そのあたりはアーキテクチャにそれほど依存しないだろうから、既存のものを参考にしてみれば
736デフォルトの名無しさん:2005/05/07(土) 01:14:57
>>730
あーそういうことでしたか・・・
的外れでしたね、すみません

>>733
ROMエリア初期化ってのは変だね。勢いだけで書いてしまったよ
ごめんなさい。

DATAエリア初期化ってのは、まさに.dataセクションの初期化で、
グローバル変数やらstaticな変数の初期値代入です。
といっても、ROMセクション(.rodataとか)から.dataへのコピーを
するだけですが
適当なcrt.sを読むのが一番の解決方法かと
737730:2005/05/07(土) 02:28:25
>>726
何か(汎用)のCまたはC++標準ライブラリを組み込むつもりがあるのか
分かりませんが、malloc禁止ということからすると既にチームの方針
として標準ライブラリは諦めているのではないかとも思えます。

734の問題ですが、やはりgcc特有の事柄についてドキュメントを
探し回るしかなさそうですね。私も興味があったので少しググッて
みたところ次のページの「.init および .fini セクション」がヒントを
与えてくれそうです。

http://www.globe.to/~oka326/archive/elf_doc_sgml_ja/elf_doc.html

最終的にはソースコードに辿り付くというオチですみませんが。
738デフォルトの名無しさん:2005/05/07(土) 07:20:34
つか組み込みでOS無しでboot書くとかそんなレベルなら、
当然ldscriptまで自分で書いてアドレスとかセクションとか管理しなきゃ
やってられんだろ。

となればおのずと.initとか.ctorとかの各セクションの意味とかもわかってなきゃ
いけないと思うのだが、>>726はそんなレベルで大丈夫なのか?

>>737のリンク先、linker&loader (http://pc8.2ch.net/test/read.cgi/tech/1033403294/)
あとは各種unixのcrt0のソースでも嫁
739730:2005/05/07(土) 14:22:18
>>738
きっと大丈夫でしょう。726は自分が何を知っていて、何を知らない
のかをキチンと把握していますから、着実に目的に近づいて
いくのではないでしょうか。

>linker&loader

Linkers & Loaders ( http://www.iecc.com/linker/ )の邦訳ですね。
他で扱わない内容でよい本だと思いますが各種実行ファイルの
形式とか再配置とか動的リンクとか今回の目的には余分な情報が
多いかも知れません。
726さんは少なくとも組み込みソフトの基本的な知識は持ち合わせて
いるようなので、足りないのはこの本よりは、より実践的なgccやld
などのツールの使いこなし方、じゃないかな。

ld の解説で適当な日本語のサイトが見つからなかった。
http://www.big.or.jp/~mio/it-old/lx_old/lxref/lx_ref_ld_1j.txt
リンカスクリプトの詳細は本家じゃなきゃ駄目?
http://www.gnu.org/software/binutils/manual/ld-2.9.1/ld.html
http://www.gnu.org/software/binutils/manual/



# 関係ないけど Snapshot: MinGW-4.0.1.exe が出てますね。
740デフォルトの名無しさん:2005/05/07(土) 16:14:02
>>726

まるで数ヶ月前の自分を見ているようです。
某 SH マイコン系から ARM 系に移るのに 処理系は GCC を選択。
私は MinGW クロスgcc に IDE がついた処理系を会社で買ってもらって
そいつが吐き出す GNU ld のリンクスクリプトを見て独力でいろいろ覚えました。
イギリスのRowleyってとこで CrossWorks for ARM ってのが売っています。
http://www.rowley.co.uk/arm/index.htm
495ポンド。日本円にすると9万8千円ってとこ。1ヶ月くらい試用も出来ます。
全部覚えてからは CQ出版インターフェース系のバックナンバをそろえて
Cygwin + GCC + newlib 環境に移動。こういう方法もあるってことで。
741デフォルトの名無しさん:2005/05/07(土) 16:28:06
MinGW4.0.1出たけど、入れるかどうしようか迷ってる。
安定版を待つまでもないかな。
742デフォルトの名無しさん:2005/05/07(土) 18:58:07
>>739
> ld の解説で適当な日本語のサイトが見つからなかった。
http://www.sra.co.jp/wingnut/technical-info.html
SRAのサイト(http://www.sra.co.jp/wingnut/)は
よく利用させてもらってます。
743デフォルトの名無しさん:2005/05/07(土) 19:02:33
>741 オラは本家のほうが4.0.xになるまで様子見だべ。
744726:2005/05/07(土) 23:30:31
うおぉぉぉ。みなさんありがとうございます。感動です。
それにしても、情報見つけるのがみなさん上手ですね・・・orz

>>728
 なるほど。.dataセクションは、組み込み系では使わないとか思っていたのですが、
 そうではなく、.rodataからコピーするんですね。
 これには気づきませんでした。

>>730
 貴重な情報ありがとうございます。これはかなり役に立ちそうです。プリントアウトして読んでみます。
 さらっと読んでみましたが、.init重要そうですね。

>>738
 これまた誘導ありがとうございます。「Linkers & Loders」という本は見てみる価値ありそうですね。
 DLL関係は確かに必要ないのですが、本の前半が気になるので買ってみようかと思います。

>>740
 インターフェース系のバックナンバーは会社にそろっているはずですので、確認してみます。
 特に「これイイ!」という記事があったら教えていただけますと助かります。

>>742
  貴重なURLありがとうございました。
  こ、これは・・・という感じです。
745デフォルトの名無しさん:2005/05/08(日) 06:53:39
>>744

>インターフェース系のバックナンバーは会社にそろっているはずですので、確認してみます。
>特に「これイイ!」という記事があったら教えていただけますと助かります。

2005/1月号
特集 フリー・ソフトウェア活用組み込みプログラミング
http://www.cqpub.co.jp/interface/contents/2005/200501.htm

746デフォルトの名無しさん:2005/05/10(火) 02:30:29
さんざんフリーソフトの幅広いチョイスで頭を悩ましてから、やっと決心して
昨日MinGWをインストールした。

これから頑張ってC++の勉強をするぞー
747デフォルトの名無しさん:2005/05/10(火) 09:09:10
プロセス間でデータをやりとりするにはどうしたらよいのでしょうか?
748デフォルトの名無しさん:2005/05/10(火) 10:33:07
>>747
データ量と速度とタイミング、後は両者の関係がわからんとなんとも。
pipeでことが足りるならスクリプトでも書けばいい話だし。
749デフォルトの名無しさん:2005/05/11(水) 00:39:14
基本はファイルでやりとりかとおもふ。低速だけど
750デフォルトの名無しさん:2005/05/11(水) 01:05:52
やっぱり C O M でしょ。
751デフォルトの名無しさん:2005/05/11(水) 01:20:03
ファイルだなんて、一体どこの世界の基本だよ
752デフォルトの名無しさん:2005/05/11(水) 03:12:49
Unixならよくある話だ。
753デフォルトの名無しさん:2005/05/11(水) 04:15:58
例えば? まあ747がどういうシチュエーションなのか書かんとしょうがないけど。

754デフォルトの名無しさん:2005/05/11(水) 21:25:34
cygwinを使ってるんですが、以下のように文字化けします。
↓はrm --helpを実行した時の文字化けの一部分です。

-v, --verbose explain what is being done
--help 、ウ、ホサネ、、ハ�、スシィ、キ、ニスェホサ
--version ・ミ。シ・ク・逾スシィ、キ、ニスェホサ

`-' 、ヌサマ、゙、・セチー、ホ・ユ・。・、・・・・ケ、・ヒ、マ。「ホ网ィ、ミ `-foo' 、ネ、、、ヲ・ユ・。・、・・ハ、
、ウ、ヲ、、、ヲ・ウ・゙・ノ、ネ、、、゙、キ、遉ヲ
rm -- -foo

rm ./-foo

他にもgccでコンパイルする時もエラーメッセージが文字化けする事があります。
cygwinを入れたときからずっとこの症状が続いてるんですが、原因は何でしょうか?
755デフォルトの名無しさん:2005/05/11(水) 21:36:38
EUC
756デフォルトの名無しさん:2005/05/11(水) 21:51:57
環境変数 LANG
757754:2005/05/11(水) 22:18:08
moconv.sh とやらを実行したら日本語で正常に表示されるようになりました。
758デフォルトの名無しさん:2005/05/13(金) 02:06:41
rxvtに変えたらRunMW32でMeadowが起動しなくなりました。
command not foundと表示されてしまいます。
コマンドプロンプトだと上手く行きます。
どうすればrxvt上でもMeadowが起動できるようになるんでしょうか?
alias使っても.emacsのロードに失敗とか、
cygwinのhomeに何故かkazと言うディレクトリが作られてしまいます。
759デフォルトの名無しさん:2005/05/13(金) 03:04:13
>>758
オマエなんかに釣られてたまるか!
760デフォルトの名無しさん:2005/05/16(月) 16:48:05
MinGWってJavaよりも遅いの? 例えば、下の二つのプログラムをIBMのThinkPadT40
上で走らせると、Javaは0.45秒で走るのに、MinGWは2.5秒もかかる。
他にもいろいろやってみたけど、大抵MinGWのほうが2倍以上時間がかかるんだけど。

import java.util.Date;
#include <stdio.h>
#include <time.h>

int main(int argc, char **argv) {
register double s1,k;
clock_t start,end;
double elapsed;
k = 10.;
int i;
long j;
start = clock ();
for (i = 0; i < 10000000; i++){
s1 = log(k);
}
end = clock ();
elapsed = ((double)(end-start))/ CLOCKS_PER_SEC;
printf ("Time it took = %f s \n",elapsed);
return (0);
}
761760つづき:2005/05/16(月) 16:49:09
#include <stdio.h>
#include <time.h>

int main(int argc, char **argv) {
register double s1,k;
clock_t start,end;
double elapsed;
k = 10.;
int i;
long j;
start = clock ();
for (i = 0; i < 10000000; i++){
s1 = log(k);
}
end = clock ();
elapsed = ((double)(end-start))/ CLOCKS_PER_SEC;
printf ("Time it took = %f s \n",elapsed);
return (0);
}
762デフォルトの名無しさん:2005/05/16(月) 16:56:18
>>760
最適化してはる?
763デフォルトの名無しさん:2005/05/16(月) 19:46:51
>>760
register doubleはやめとけ。
それと、for文の中身だが、s1に結果を代入しているだけで、後は捨てて
いるので、Javaの方は最適化で実行してない可能性がある。

アセンブリ出力を出して見てみ。
764デフォルトの名無しさん:2005/05/16(月) 20:22:37
MinGWじゃなくclやCygwinだとどうなる?ある種の最適化はJITの方が得意なんで
ネイティブよりJavaの方が早いこともある。
765デフォルトの名無しさん:2005/05/16(月) 23:47:28
最適化が一番効いてくるのはループだしな
766デフォルトの名無しさん:2005/05/17(火) 05:12:35
またJava厨か。
767760:2005/05/17(火) 06:38:02
>>766
Java厨じゃないよ。単純に、自分の書いたJavaのプログラムの方がgccよりも
早かったから、びっくりしただけ。

>>762
最適化してみたけど、全然変わらなかった。こんな単純なコードじゃ、最適化
の意味が無いのでは。

あと、ループの中身を、k *= .9999999;に変えて1,000,000,000回まわしてやった
結果、MinGW7.84秒、Java7.83秒とほぼ同じ結果になった。

>>763 
register doubleはこの場合あっても無くても影響なしでした。
(別のプログラムでは、10倍以上スピードアップしたが)。
あと、面白いのは、MinGWで、doubleの代わりにfloatを使ったら、16.87秒と、
時間が倍以上に伸びた。

単純な掛け算ではほぼ同じスピードってことは、logとかsqrtとかの
アルゴリズムが、Javaの方が良いということかな。

あと、ループの実行速度が殆ど変わらないということは、Javaもループとかは
ランタイムにコンパイルしながら実行してるってこと?でしょうね。

>>764
Cygwinはインストールしてないので試してません。
768デフォルトの名無しさん:2005/05/17(火) 07:40:48
>>760
VCToolKitで試してみたら最適化オプション無しで0.35秒
O2付けた計測できなかった
769デフォルトの名無しさん:2005/05/17(火) 08:07:15
>>767
逆。単純で何もやってないからこそ最適化かけやすい。
logの意味まで解析できれば>>763がいうように次のように最適化できるから
JITのほうが有利かもしれんし。
#include <stdio.h>
#include <time.h>

int main(int argc, char **argv) {
clock_t start,end;
double elapsed;
long j;
start = clock ();
end = clock ();
elapsed = ((double)(end-start))/ CLOCKS_PER_SEC;
printf ("Time it took = %f s \n",elapsed);
return (0);
}
doubleとfloatの話は単精度と倍精度と80bitのフォーマット変換コストかも。
つうか、どっかで実行コストと最適化についてざっと調べろ。
770デフォルトの名無しさん:2005/05/17(火) 10:09:03
はいはい。大抵JavaがCより速いってことでFA。
Cなんかよりずっと速いJavaを使ってくれ。
771デフォルトの名無しさん:2005/05/17(火) 23:20:25
どなたか下の宿題解いてくださいませんか??なんかもうさっぱりです。
今年こそは単位とりたいのですが自力でできる気がしないんです…

ダミー節点を使わないリスト構造を用いて,挿入整列の
プログラムを作成せよ
・リスト構造は,ポインタによるリンクリストを用いること
・整列前のリスト内の各要素,整列後のリスト内の各要素を
 表示するようにすること


772デフォルトの名無しさん:2005/05/17(火) 23:34:13
とりあえず、スレ違い。
773デフォルトの名無しさん:2005/05/17(火) 23:36:19
それ承知で書き込みました、ほんとに追い詰められてるんですTT
どうか良心的な方お願いします。
774デフォルトの名無しさん:2005/05/17(火) 23:58:16
なんだ良心的って。良心的かどうかという問題じゃないだろ。
プログラミングだけじゃなくて日本語もダメみたいだな。
スレ違いなんだから諦めれ。
775デフォルトの名無しさん:2005/05/18(水) 00:23:23
わかりました、すみませんでしたm(__)m
776デフォルトの名無しさん:2005/05/18(水) 00:25:50
>>767
floatで速度が遅くなるのは当たり前。
doubleへの昇格の話はC言語の仕様の基礎だぞ。
777デフォルトの名無しさん:2005/05/18(水) 01:08:07
>>776
お前まだANSI C以前の古いCの話してんのか。
778760:2005/05/18(水) 02:34:12
>>769
-Xintオプションをつかって、JITコンパイラーを回避したら、Javaの実行時間
が約8倍長くなりました。

779デフォルトの名無しさん:2005/05/18(水) 09:54:55
>>777
floatで遅くなったのは定数がdoubleだから格上げが起きているため。
それはcommonCでもC89でも同じこと。
C89ならfloat定数でdouble格上げを回避できるかもしれないだけの話。
780デフォルトの名無しさん:2005/05/18(水) 17:31:02
>>779
そりゃ、log()のプロトタイプがdoubleを引数に取ってたら仕方ない罠。
log(float)の需要が低いので、作らなかったか、古いCに仕様を合わせたかの
どちらかだろう。
781デフォルトの名無しさん:2005/05/18(水) 18:04:17
>>780
遅くなったのは乗算の方だと思うのだが。
782デフォルトの名無しさん:2005/05/18(水) 23:50:25
floatからdoubleに変換してから計算した結果をfloatに変換
783デフォルトの名無しさん:2005/05/19(木) 00:31:06
>>781
CPU依存だけど x86 では float でも double でも 80bit で演算しますが。
CPU 内の演算を 32/64/80bit のどれでやるかはステート変更命令でコントロール可能。
_controlfp を調べてくれ。

FPUの精度を弄らないんなら、float の利点はサイズが半分でキャッシュ効率が倍になることしかない。
C言語だと double 昇格で足を引っ張られることが多いので double が無難。
784デフォルトの名無しさん:2005/05/19(木) 00:39:37
結局Cは未だにPDP-11の遺影をひきずっているという事っすね・・・・。
785779=781:2005/05/19(木) 03:18:31
>>783
時間測定したのは漏れじゃない。漏れはfloatなんて一切使わないしね。
786デフォルトの名無しさん:2005/05/19(木) 11:54:43
オブジェクトを生成しない単純なコードだけ見せてJavaはCより速いんだって
言っても釣りにしか聞こえない。
787デフォルトの名無しさん:2005/05/19(木) 18:27:17
コンパイルまではうまくいくんですが実行しようとすると
Segmentation fault(core dumped)と表示されて失敗します。
原因は何でしょうか?
788デフォルトの名無しさん:2005/05/19(木) 18:33:37
>>787
gdbでbtしる!
789デフォルトの名無しさん:2005/05/19(木) 22:11:26
>>788
ほんとごめんなさい、2ちゃんはじめたばっかで用語に疎いので
解読できません。できれば標準語で書いていただけませんか?
790デフォルトの名無しさん:2005/05/19(木) 22:12:43
>>789
【初心者歓迎】C/C++室 Ver.17【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1115958601/
791デフォルトの名無しさん:2005/05/19(木) 22:17:16
>>790
わかりました
792デフォルトの名無しさん:2005/05/20(金) 18:53:16
なんか、マルチスレッドのプログラムをコンパイルしたら
gcc: unrecognized option "-pthread"
と怒られるのですが、どうすればいいですか?
超既出だったら、ごめんなさい
793デフォルトの名無しさん:2005/05/20(金) 18:58:48
-lpthread
794792:2005/05/20(金) 19:06:19
ありがとうございます。見事にうまくいきました
そいえばFreeBSDで-lphreadでエラーがでて-pthreadに変えたことを忘れてた・・・orz
795792:2005/05/20(金) 20:55:21
どうも、また壁にぶち当たりましたorz
ソケットのselectがおかしな挙動します・・・
非ブロッキング型の通信プログラムを組んでいるんですが

FD_ZERO(&readmask);
FD_SET(sock,&readmask);
FD_SET(0,&readmask);
while(1){
timeout.tv_sec = 10;
timeout.tv_usec = 0;
if(select(max_fd,&readmask,NULL,NULL,&timeout) != 0){
if(FD_ISSET(0,&readmask)){
〜〜
if(FD_ISSET(sock,&readmask)){
〜〜
このときにconnectしたりしても反応がありません。
FreeBSDではうまくいったんですが・・・(´д`;)
796752:2005/05/20(金) 20:56:50
とりあえずタブが表示されない件

FD_ZERO(&readmask);
FD_SET(sock,&readmask);
FD_SET(0,&readmask);
while(1){
  timeout.tv_sec = 10;
  timeout.tv_usec = 0;
  if(select(max_fd,&readmask,NULL,NULL,&timeout) != 0){
    if(FD_ISSET(0,&readmask)){
      〜〜
    if(FD_ISSET(sock,&readmask)){
      〜〜
797792:2005/05/20(金) 20:58:10

名前ミスしてしまた・・・
スレ汚しごめんなさい
798デフォルトの名無しさん:2005/05/21(土) 01:03:53
まさかmax_fd+1なんてオチじゃないよな?
799デフォルトの名無しさん:2005/05/21(土) 10:32:48
Javaの方がC++より速いというのは、常識なんだが・・
800デフォルトの名無しさん:2005/05/22(日) 21:23:39
lddをインストールしようと思ったのですが、lddがパッケージ一覧に見あたりません・・・
801デフォルトの名無しさん:2005/05/22(日) 22:25:37
じゃああきらめよう。
802デフォルトの名無しさん:2005/05/23(月) 15:28:43
>>800
binutilsあたりになかった?
803デフォルトの名無しさん:2005/05/23(月) 20:10:59
>>802
それはld
804デフォルトの名無しさん:2005/05/24(火) 00:05:21
仮にlddがあったとして、一体何に使うつもりなんだか
805デフォルトの名無しさん:2005/05/24(火) 00:14:01
072
806デフォルトの名無しさん:2005/06/05(日) 01:29:13
platexが見当たらない
807デフォルトの名無しさん:2005/06/05(日) 11:49:31
cygwinってeggでコンパイルできないんですか?
808デフォルトの名無しさん:2005/06/08(水) 11:54:55
WindowsXP+DevC++-JP(Mingw)でOpenCVを使おうと
ttp://www.design.t.u-tokyo.ac.jp/~nakano/opencv.html#code_make
ここのサンプルプログラムをそのまま流用したところ、
コンパイル後実行したところ、エラーが発生しました。
デバッガを動かしたところ、cvCaptureFromCAM()関数で
「メモリアクセス違反」(だったかな…)といわれました。
OpenCVから用意されてる関数を使おうとするとこのようになるみたいです。
何か解決方法があれば教えてください。

ちなみに、Meでも同じようにしてコンパイル>実行をしてみましたが、
結果はおなじでした…
809デフォルトの名無しさん:2005/06/09(木) 10:21:06
WindowsXPでCygwinデバッガ gdbを使っていますが、プログラム実行時の
標準入出力のリダイレクトがうまく行きません。どうやったらうまく行くの
かご教授をお願いne。

実行したコマンド

c:\>gdb test.exe
:
:
(gdb) run >output.txt
出力結果 <--- リダイレクトされずに表示されてしまう
Program exited normally.
(gdb)
810デフォルトの名無しさん:2005/06/10(金) 00:23:47
set args
811デフォルトの名無しさん:2005/06/10(金) 09:37:07
C のマクロ文について質問させてください。
マクロを一時的に無効にしたいのですが、可能でしょうか?
可能でしたらご教示よろしくお願いします。

#if ...
#define ABC ...... // 条件による定義
#endif

#invalidate ABC // 一時的に ABC を定義を無効にしたい
#validate ABC // 定義を有効にしたい
(#invalidate #validate なんてマクロ文はありませんが...)
812779=781:2005/06/10(金) 09:57:14
>>811
「一時的に」は無理。
#undef ABC
して、改めて
#define ABC ...

もしABCの定義が散らばるのがいやならば、
#if ...
#define ABC ...
#endif
だけのdefine_ABC.hでも作って、

#undef ABC
...;
#include "define_ABC.h"
とでもするとか。
813デフォルトの名無しさん:2005/06/10(金) 09:58:00
おっと、名前消し忘れたぜ…_/ ̄|○
814811:2005/06/10(金) 12:11:42
>>812
ありがとうございます。
とても勉強になりました。
815デフォルトの名無しさん:2005/06/10(金) 23:25:57
MinGW 4.1.0 Release出てるね。
816デフォルトの名無しさん:2005/06/11(土) 00:36:33
>>815
変更点キボン
817デフォルトの名無しさん:2005/06/11(土) 00:44:26
>>816
mingw-makeが新しくなってる。4.0.5からの変更点はこれだけかな?

gcc4.0.0とは別物。MinGW自体まだgcc3.4.4の候補版止まりだし。
で、MinGW本家で、全部ダウンロードするのか、その都度ダウンロード
する今までの形式に戻すか、議論がされている。まだISDN使ってる
人がアメリカでは多いみたいで。

という事で、MinGW3.4.2を現在使っている人は、好奇心で入れて
みるか、入れないでそのまま様子見でもいいと思う。3.4.4はまだベータ版
なのでさすがに怖い。
818デフォルトの名無しさん:2005/06/12(日) 08:38:42
gcc version 3.4.2 (mingw-special) というものを使っているのですが、
C の gcc 拡張として ushort や uint といったタイプは使えないのでしょうか?
Linux 上の 3.3.3 で普通に使えていたので、そのままソースを持ってきたのですが、
エラーでまくりで。
819デフォルトの名無しさん:2005/06/12(日) 09:23:00
>>818
gcc拡張でもなんでもない。
typedef unsigned short ushort;
820デフォルトの名無しさん:2005/06/13(月) 14:01:00
mingw-gcc3.4.4 いれていくつかプログラムをビルドして
みたけど、いまのところ大きな問題はないみたい。
821808:2005/06/15(水) 18:46:44
>>808
なんとか自己解決できました。
下の2つのサイトを参考に(Cygwinでの解決方法ですが)
Dlltoolを使いdllに接続するライブラリを作れば大丈夫なようです。
ttp://www.dh.aist.go.jp/~kimura/opencv/opencv-0.9.5.html.ja
ttp://hawaii.aist-nara.ac.jp/~takash-b/japanese/opencv.html#OpenCVonCygwin

ライブラリの作成方法(コマンドプロンプトから)
echo EXPORTS > xxx.def
nm \Program Files\OpenCV\lib\xxx.lib | grep ' T _' | sed 's/.* T _//' >> xxx.def
dlltool --def xxx.def --dllname xxx096.dll --output-lib libxxx.a

※xxxはOpenCVに同梱されているライブラリ名、cv,cvaux,cvcam,cxcore,highguiが入ります。
※grepやsedコマンドはChStandard(ttp://www.softintegration.com/products/chstandard/download/)が必要。
822デフォルトの名無しさん:2005/06/16(木) 08:47:41
>>821
自己解決&報告乙。
823デフォルトの名無しさん:2005/06/23(木) 13:39:35
wget-1.9.1-mingwPORT.tar.bz2 キタ
824デフォルトの名無しさん:2005/06/24(金) 00:13:41
mingwかcygwinで64bitバイナリ吐けるgccあります?
825デフォルトの名無しさん:2005/06/24(金) 01:01:56
まだ
Binutils待ち
ていうかむしろ俺が欲しい
そして俺にはBinutilsハクるだけの気力ナシング
826825:2005/06/24(金) 01:03:24
正確に言うと
GCCはx86-64の汗んぶりコード吐けるのだが
それをELF64でなくCOFF+(だっけ?)で吐ける
Binutilsがまだ存在しない。
827デフォルトの名無しさん:2005/06/24(金) 02:12:36
まだないのか
yasmがあるから行けそうな気もするんだけどなぁ
828デフォルトの名無しさん:2005/07/03(日) 02:49:02
Cygwin+gccで○○がコンパイルできない的な質問はここでよろしいでしょうか?
もし違いましたら誘導お願いします。
829デフォルトの名無しさん:2005/07/03(日) 07:33:51
cygwin gcc 相談だから OK だと思う
830デフォルトの名無しさん:2005/07/03(日) 08:15:42
>828
自前で書いたプログラムならともかく、配布されてるものなら UNIX 板か Windows 板の Cygwin スレじゃないか?
現状どっちも雰囲気よくないけどね。
831デフォルトの名無しさん:2005/07/03(日) 08:55:42
言語やコンパイラ類自身に関する問題ならこちらでもかまわないと思うが、
たいていは、ヘッダー関連など Cygwinのシステム上の問題、
「コンパイルできない」んじゃなくて単に Cygwinへの移植がわからない、
というのを認識できてない場合が多いだろうからなあ。
このほとんどの場合は、Cygwinスレのほうがより妥当だと思うが。
832デフォルトの名無しさん:2005/07/03(日) 10:27:27
829様
830様
831様

丁寧なレスポンスどうもありがとう御座います。
このスレッドを見る限りコンパイラ類自身の話題が多いと判断しました。
そこでCygwinスレのほうへ行って見ます。
833デフォルトの名無しさん:2005/07/04(月) 17:17:26
MinGWでDLLを作りたいのですが
gcc -O2 -o hoge1.o -c hoge1.c
gcc -O2 -o hoge2.o -c hoge2.c
dllwrap -k -def hoge.def --driver-name gcc -o hoge.dll foo.a hoge1.o hgoe2.o
とやってもうまくリンクされません
リンク時に実行しているfoo.a内の関数がundefined reference to 〜と出てしまいます
どうやってリンクさせたらいいですか?

普通にEXEファイルは作れるのでライブラリ自体は正常だと思います
834デフォルトの名無しさん:2005/07/04(月) 17:32:25
>>833
> リンク時に実行しているfoo.a内の関数がundefined reference to 〜と出てしまいます

この文が不明確。ちゃんと詳しく書きましょう。「実行」ってなんだ。

> 普通にEXEファイルは作れるのでライブラリ自体は正常だと思います

インポートライブラリfoo.aは正常と言いたいのかな?
835デフォルトの名無しさん:2005/07/04(月) 18:14:29
>この文が不明確。
hoge2.cの中でfoo.aの中の関数func()を呼び出しているのですが
undefined reference to `func'
とdllwrapを実行するとエラーになってしまいます

>インポートライブラリfoo.aは正常と言いたいのかな?
そうです。
836デフォルトの名無しさん:2005/07/04(月) 18:28:29
>>835

だったら、
> dllwrap 略 -o hoge.dll hoge1.o hoge2.o foo.a
じゃない?
837デフォルトの名無しさん:2005/07/04(月) 18:35:15
えっ!?
順番って関係するのか…il||li ○| ̄|_
リンクできました。スレ汚しスマソ
838833=835=837:2005/07/04(月) 21:25:34
エラーは出なくなったけどやっぱりリンクされていないっぽい…orz
ビルド後のDLLのサイズがfoo.aより明らかに小さいし…
839デフォルトの名無しさん:2005/07/04(月) 22:10:32
>>ビルド後のDLLのサイズがfoo.aより明らかに小さい
だからなに?
840デフォルトの名無しさん:2005/07/04(月) 22:36:58
>>838
hoge.dllのサイズとインポートライブラリfoo.aのサイズは何の関係もないぞ?
841デフォルトの名無しさん:2005/07/05(火) 23:09:44
mingwの日本版ではない物を使っているのですが
2バイト文字を使っていてもエラーや文字化けが起こりません
どうしたらいいでしょうか?
842デフォルトの名無しさん:2005/07/05(火) 23:57:00
あきらめる
843デフォルトの名無しさん:2005/07/06(水) 00:13:29
>>841
文字化けに関してはソースの文字コード変えてみたら?
うまくいけばエラーにもかかるかも。
844デフォルトの名無しさん:2005/07/06(水) 09:57:17
文字化けやエラーを起こしたいのか
845デフォルトの名無しさん:2005/07/06(水) 13:41:10
>>841
「ソ」とか「表」を使ってみれ。
846デフォルトの名無しさん:2005/07/06(水) 14:17:26
MinGWでマルチスレッドな事をしたいんだけどどこか解説しているWebページとかあったら教えて下さい
847デフォルトの名無しさん:2005/07/06(水) 14:32:53
>>846
コードはVC++のときと何ら変わらんですよ。

848846:2005/07/06(水) 14:45:45
VC++にあってMinGWにないスレッド関係の関数があるとか無いとか見たことあるんだけど
そこら辺は問題なし?
849デフォルトの名無しさん:2005/07/06(水) 14:51:27
ぱっと思いつくところでは、MinGWには__declspec(thread)がない、ぐ
らいかなあ。

850846:2005/07/06(水) 23:03:34
thx。VC++のサンプル見ながらやってみます
851デフォルトの名無しさん:2005/07/07(木) 03:57:09
俺はpthreadつかうよ。
852デフォルトの名無しさん:2005/07/12(火) 21:22:34
MinGW + gcc 3.4.2を最近インストールしたのですが、gcc 3.3.1の頃に比べて
全く同じソースでも、吐き出すバイナリが少しばかり大きいことに気が付きました。
吐き出されたバイナリをエディタで覗いてみると、

-LIBGCCW32-EH-2-SJLJ-GTHR-MINGW32 w32_sharedptr->size == sizeof(W32_EH_SHARED) %s:%u: failed assertion `%s'
../../gcc/gcc/config/i386/w32-shared-ptr.c GetAtomNameA (atom, s, sizeof(s)) != 0

という、3.3.1でビルドした時にはなかった文字列が含まれていました。
stripしても残ったままです。

これは一体何で、削除する方法はあるのでしょうか。
853デフォルトの名無しさん:2005/07/12(火) 21:57:11
細かいことを気にしていると禿げるぞ
854852:2005/07/12(火) 21:58:21
>>853
まあ、そうおっしゃらずに。
855デフォルトの名無しさん:2005/07/13(水) 11:54:02
>>852
必要だからlibgccからリンクされるんであって、削除しようなんて考え
ないことだ。

856デフォルトの名無しさん:2005/07/15(金) 01:05:21
MinGW環境で使えるGUIなソースレベルデバッガってあったら教えて
857デフォルトの名無しさん:2005/07/15(金) 02:04:18
insight?
gvd?
好きなのを選べ
858デフォルトの名無しさん:2005/07/15(金) 13:36:09
>>852
古いの使うか自分でビルドしる
859デフォルトの名無しさん:2005/07/15(金) 21:43:02
MinGWのgccではなく、cygwinのgccを使うメリットって何?
単に"Unixもどきのコマンドやスクリプトが使える"ってだけかな。
UnixにたいしてこだわりがなければMinGWでOK?
860デフォルトの名無しさん:2005/07/15(金) 21:57:56
/dev/以下が使えるとか
861デフォルトの名無しさん:2005/07/15(金) 21:58:13
>>859
「もどき」じゃなくて本物だけどね(gnuプロダクトを「本物」と言えれば、だけど)。

Windowsにそもそも存在しない概念とかはmingwでは未実装になってることもあるから、
unix由来のソースをコンパイルする場合はmingwでは役者不足の場合もある。
Windowsでしか使わないものを自分で作るのであれば、その辺考慮して、お好きなように。

gccに限った話なら、cygwinのgccでもmingw相当のバイナリ(つまりcygwinに依存しない)
が作れるから、コンソール環境が揃ってるcygwinを使わない理由はあんまりない。
cmd.exe(command.exe)で十分だってのなら、こちらもお好きなように。
862デフォルトの名無しさん:2005/07/15(金) 22:01:50
>>861
>command.exe
違和感を覚えた俺…
863デフォルトの名無しさん:2005/07/15(金) 22:19:01
cmd.exe
command.com
864デフォルトの名無しさん:2005/07/15(金) 23:52:46
>>861
役者不足って、
力不足か?
865デフォルトの名無しさん:2005/07/16(土) 01:58:38
cygwin core が GPL でなければいつまでも mingw と
分離し続けることもなかったのになぁ
合流して一本化できたかもしれない
866デフォルトの名無しさん:2005/07/16(土) 02:40:06
>>862-864
ソノトオリデスゴメンナサイ...orz
867デフォルトの名無しさん:2005/07/16(土) 03:04:35
実現方法も方向性も全然違うというのに、どうやって一本化するというのか
868デフォルトの名無しさん:2005/07/16(土) 06:49:24
ヒント:EGCSとGCC
869デフォルトの名無しさん:2005/07/16(土) 16:53:18
UNIX用のCコードをWINDOWS CYGWINでコンパイラしようと思ったんだけど、
エラーばっかり出て使えない・・・なんで?
楽したいのに・・・
870デフォルトの名無しさん:2005/07/16(土) 16:57:08
>>869
つ[ちらしの裏]

真面目に質問したいのなら、もっと具体的に書かないと誰もアドバイスできないかと。
871デフォルトの名無しさん:2005/07/16(土) 17:16:52
gcc ファイル名.c > name.txt としてもエラーがリダイレクトできない・・・
872デフォルトの名無しさん:2005/07/16(土) 17:21:28
DOSでやったらコピペできました。
エラーが多いので端折ります
/usr/include/stdio.h:176: error: parse error before "size_t"
/usr/include/stdio.h:196: error: parse error before "fread"
/usr/include/sys/unistd.h:57: error: parse error before "size_t"
/usr/include/sys/unistd.h:59: error: parse error before "size_t"
ファイル名.c:175: error: parse error before "__i"
ファイル名.c:175: error: `__i' undeclared (first use in this function)
等。
CYGWINは最新でgccはsetupで入れ直しました
873デフォルトの名無しさん:2005/07/16(土) 17:25:37
>>872
こんなエラーが100行ぐらい続きます。
他のCコードでも同じようでした。
874デフォルトの名無しさん:2005/07/16(土) 17:31:21
>>871
gcc 2>&1 > name.txt

>>872
インストールが巧くいってないんでないの?
「UNIX用のCコード」ではなく、単純なプログラムを書いてそれで試したら?
875デフォルトの名無しさん:2005/07/16(土) 17:43:13
>>874
ごく簡単なプログラムなどは動くようです。
setupインストールを再度しても同じ結果。
876デフォルトの名無しさん:2005/07/16(土) 17:46:55
んじゃ、その問題の「UNIX用のCコード」でstdio.hをインクルードする前に
マクロか型定義がぶつかっているのではないかな?
インクルードする順番を変えてみるなどしてみるとか。
#さもなきゃその「ファイル名.c」を晒すかな。
877デフォルトの名無しさん:2005/07/16(土) 17:55:32
>>875
874が言ってるのは、(動くかじゃなく)ごく簡単なCソース(例えば
Hello World の出力のみ)ならばきちんとコンパイルできることを
確かめたのか、と言うこと。
それが大丈夫なら、エラーの起こるソースの移植性が悪いだけかも。
というか、初心者のCの勉強だとするとスレ違いだしつきあいきれない。
それと、一番最初のエラーが
/usr/include/stdio.h:176: error: parse error before "size_t"
だったんだよね?
878デフォルトの名無しさん:2005/07/16(土) 18:21:30
>マクロか型定義がぶつかっているのではないかな?
ぶつかってる(conflict)なら、ちゃんとそのエラーが出るけど、
初学者はエラーをきちんと読まない人もいるからねぇ。
まあ、最初のエラーじゃない可能性もあるし。
例えば他に次のコードでも、同じエラーを起こせてますし。

#define __size_t
#include <stdio.h>

In file included from sample.c:2:
/usr/include/stdio.h:176: error: parse error before "size_t"
/usr/include/stdio.h:196: error: parse error before "fread"
/usr/include/stdio.h:197: error: parse error before "fwrite"
/usr/include/stdio.h:236: error: parse error before "size_t"

879デフォルトの名無しさん:2005/07/16(土) 18:47:53
すみません解決しました。
どうやら複数のコードがまたがってたみたいで、
コードごとに分けてコンパイルしなきゃいけなかったいです。
_| ̄|○iii
すみません・・・でも勉強になりました。
ありがとうございました。
880デフォルトの名無しさん:2005/07/16(土) 20:58:41
意味がわからんが、関わるだけ無駄というのは分かった。
881デフォルトの名無しさん:2005/07/19(火) 21:07:29
本当に恥ずかしい質問です。
cygwinをインストールしたときにデスクトップにでたショートカットを間違えて消したんですが、どうすればまた起動できますか?
Cドライブの中のフォルダ内は探したのですが、それらしいのはありませんでした。
882デフォルトの名無しさん:2005/07/19(火) 21:08:12
cygwin.bat
883デフォルトの名無しさん:2005/07/19(火) 21:09:03
>>881
俺の場合そのショートカットは"D:\cygwin\cygwin.bat"にリンクされているようだ。
884デフォルトの名無しさん:2005/07/19(火) 22:08:44
>>833
ぐわっ…俺と同じドライブに入れてる…w
885デフォルトの名無しさん:2005/07/19(火) 22:13:18
>>882
>>883
レスありがとうございました。おかげで解決しました!
すいませんが、もうひとつ質問致します。
インストールしてCドライブにできたcygwinをCDに焼いて、オフライン環境のパソコンに移しました。
そこでcygwinを起動したのですが、コマンドプロンプト画面に
bash.exe: warning: could not find /tmp, please create!
と表示され、普通に操作できません。
tmpフォルダがないので出来ないと思い、bash.exeがあるフォルダに作ったのですが無理でした。
どうすればいいのですか?
886デフォルトの名無しさん:2005/07/19(火) 22:15:17
>>885
cygwinはマウント情報をレジストリに持っている
887デフォルトの名無しさん:2005/07/19(火) 22:17:51
>>885
>bash.exeがあるフォルダに作った
which bash の結果と /tmp をじっくり比較しなさい
888デフォルトの名無しさん:2005/07/19(火) 22:34:24
レジストリを読まずに.iniを読むようにするパッチをどっかの人が
作ってたと思うからそっちを調べるとか
889デフォルトの名無しさん:2005/07/19(火) 22:35:27
cygwin上にターゲットがi386-pc-elfのクロスgccをインストールしましたが、
実際にそのgccでお決まりのhelloworldをコンパイルしようとしたのですが、ldに怒られます。
バージョンは、
gcc: 3.4.4
binutils: 2.16
newlib: 1.13.0

エラーメッセージは
/usr/lib/gcc/i386-pc-elf/3.4.4/../../../../i386-pc-elf/bin/ld: crt0.o: No such
file: No such file or directory
collect2: ld returned 1 exit status

890デフォルトの名無しさん:2005/07/19(火) 22:48:39
>>886
>>887
>>888
みなさんレスありがとうございます。
現在、携帯しかオンライン環境がないので、再来週あたりにじっくりやりたいと思います。
本当にありがとうございました。
891デフォルトの名無しさん:2005/07/20(水) 00:38:00
ttp://pc8.2ch.net/test/read.cgi/unix/1107587275/701 より。

Windowsを再インストールした後でcygwinを動かす方法

環境変数CYGDIRを登録
set CYGDIR=D:\cygwin

レジストリを変更
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions]
[HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin]
[HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2]
"cygdrive prefix"="/cygdrive"
"cygdrive flags"=dword:00000022
[HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2\/]
"native"="%CYGDIR%"
"flags"=dword:0000000a
[HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2\/usr/bin]
"native"="%CYGDIR%/bin"
"flags"=dword:0000000a
[HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2\/usr/lib]
"native"="%CYGDIR%/lib"
"flags"=dword:0000000a
[HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\Program Options]
892デフォルトの名無しさん:2005/07/21(木) 17:42:16
cygwinでCのファイルをコンパイルしようとしたら
bash: gcc: command not found
ってエラーが出るんだけど何でか分かります?
教えて下さい。
893デフォルトの名無しさん:2005/07/21(木) 18:31:32
>>892
gccをインストールしていないのでは?
Cygwinのsetup.exeでgccにチェックはしてある?
894デフォルトの名無しさん:2005/07/21(木) 20:32:55
>>892
"command" と "not" と "found" を英和辞書で引いてみれば原因が分かるのではなかろうか
895デフォルトの名無しさん:2005/07/21(木) 20:47:37
>>892
cygwinインストールのデフォルトは"Devel"がOffになっているので、
"Devel"をマウスでいぢくってinstallにする必要がある。
896デフォルトの名無しさん:2005/07/22(金) 20:53:33
漢なら黙ってフルインストール
897デフォルトの名無しさん:2005/07/22(金) 20:56:50
>>896
cygwin以下を除外すればいいけど、ウイルススキャンが時間かかる。
898デフォルトの名無しさん:2005/07/24(日) 19:36:42
>>891
この文はコマンドプロンプトに打ち込むんですよね?
認識されません、などと出てうまくいかないのですが…
899デフォルトの名無しさん:2005/07/24(日) 19:43:29
ポカーン( д)  ゚ ゚
900デフォルトの名無しさん:2005/07/24(日) 19:51:29
   ∩___∩         |
   | ノ,,_   _,ヽ        .|
  /  "゚'` {"゚` |        J
  | ∪  ,__''_  ミ     
 彡、    ー    |       
/     ∩ノ ⊃  ヽ  
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /
901デフォルトの名無しさん:2005/07/24(日) 20:21:07
釣りじゃないです…助けてください…
902デフォルトの名無しさん:2005/07/24(日) 20:48:23
>>901
まず目的を書け。
903デフォルトの名無しさん:2005/07/24(日) 21:07:00
>>902

>>885を参照ください。オフライン環境で起動させるためです。
904デフォルトの名無しさん:2005/07/24(日) 21:22:36
>>903
コマンドプロンプトからregeditと打ち込んでみるべし。
905904:2005/07/24(日) 21:26:45
あー、変なもん弄るなよ。
マシンが起動できなくなっても俺知らんからねw
906デフォルトの名無しさん:2005/07/24(日) 22:40:09
>>904
レジストリエディタは開けました。ありがとうございます。
そこからcygwinフォルダを開いたんですが、どこに文章を打ち込めばいいのですか?
テキストをレジストリに変えてインポートするのも無理でした。新規で試しましたが出来ませんでした。
907デフォルトの名無しさん:2005/07/24(日) 22:59:03
>>906
cygwin使う前にwindowsの使い方覚えたほうがいいと思う。
908デフォルトの名無しさん:2005/07/24(日) 22:59:29
ダウンロードしたファイル一式持って行ってsetup.exeでローカルインストールした方が早くないか?
909デフォルトの名無しさん:2005/07/24(日) 23:04:25
Cygwinを使うのがまだ早い
910デフォルトの名無しさん:2005/07/24(日) 23:27:19
特殊な理由がなく、たんにシグインをネット隔離マシンにインスコしたいだけなら
>>908の方法をオススメする。
シロートがレジストリエディタいじるのは危険じゃて。
(まあ失敗->後悔するのも勉強だとおもうけど)
911デフォルトの名無しさん:2005/07/24(日) 23:30:10
それではいつまでもシロートのまま。
レジストリなどガンガンいじれ。
そして涙を流せ。
涙の数だけ強くなれるよ。
912デフォルトの名無しさん:2005/07/25(月) 00:36:05
そんな筋の悪いやり方で似非玄人になられても使えない。
913デフォルトの名無しさん:2005/07/25(月) 01:38:07
復旧手段を知っているのなら、いくら破壊しても構わないと思う、が
レジストリの操作が出来ないのなら問題外だね
914デフォルトの名無しさん:2005/07/25(月) 02:12:38
>>908の方法がいちばんいいよ
915デフォルトの名無しさん:2005/07/25(月) 19:45:29
レジストリを初めて触って、間違ってOSが立ち上がらなくなる経験を経て
はじめて一つ賢くなれる。
916デフォルトの名無しさん:2005/07/25(月) 23:34:39
よっぽどバカなんだな。
917デフォルトの名無しさん:2005/07/26(火) 17:29:51
Cygwin自体レジストリもわからないような素人が使える代物じゃないと思うけど…

>>911
同意だな…俺も昔うっかりexeの関連付け、いじっちゃって復旧不能→OS再インストールしたことあるよ…orz
ある程度慣れてくればどこをどういじると危険なのかわかるようになってくるよね

>>912
マニュアルに書いていないトラブルが起きると何も出来ない知識人乙w
918デフォルトの名無しさん:2005/07/26(火) 17:45:47
>>912>>917のようなレスを返すようだと、論理学の基礎を学び直した方がいいぞ。
919デフォルトの名無しさん:2005/07/26(火) 17:46:33
俺の歴史、最初に触れたのはPCDOS6.2だった
helpて打って流れる文字みてるだけだった。楽しかった
飽きてきたのでhelpで流れる文字を打ち込んでみた
全部がなんやら英語だらけで同じメッセージだしてきた。つまんなかった

でも一つだけなにやら立体的なもん出しやがった。楽しかった。
カーソル動かしまくっていろいろ押した。全部押した。
翌日何も動かなくなってた。奴の名前はfdisk
スキルのついた今ならはっきりとわかるfdisk以外が吐いてたメッセージは
引数よこせよばか!!だったんだ

険しい道を選べ、レジストリぐらい屁でもねー
920デフォルトの名無しさん:2005/07/26(火) 17:51:29
ROM BASICとモニタしかなかった頃ならともかく、
その時代にそんなやりかたって非効率すぎ。
単にものの学び方を知らないだけでしょ。
921デフォルトの名無しさん:2005/07/26(火) 17:58:21
サルですな

922デフォルトの名無しさん:2005/07/26(火) 18:00:39
try & errorなんて時代遅れ
923デフォルトの名無しさん:2005/07/26(火) 18:51:09
最先端のやり方教えれ。
924デフォルトの名無しさん:2005/07/26(火) 20:11:11
>>923
喪前様が最先端。
925デフォルトの名無しさん:2005/07/26(火) 20:11:44
Google先生に聞く
926デフォルトの名無しさん:2005/07/26(火) 20:38:22
stringsとstraceしてみる自分は…
927デフォルトの名無しさん:2005/07/29(金) 01:28:49
いくつか質問があります。

1つ目は、ここの

http://coconut.sys.eng.shizuoka.ac.jp/bmp/#lib

bmp.h、bmp.c、test0.cをcygwin+gccでコンパイルしてみたら、
きちんとbmpが作成されたんですが、

bmp.h で MAXWIDTHとMAXHEIGHTが1000になっていて、

color data[MAXHEIGHT][MAXWIDTH]

となっているのでスタック領域が2MBを超えているはずなのになぜかうまく動きます。
あと、これをg++でコンパイルしようとしたところ

multiple definition of〜とかになり通らなかったのですがなぜなのでしょうか?

またその後、bmp.hのグローバル変数をbmp.cだけのほうに記述することでそのエラーはなくなり、
g++でもコンパイルできたのですが、その場合実行するとスタックオーバーフロー〜のような
エラーが出ます。


MAXWIDTHとMAXHEIGHTをそれぞれ590あたりにすると2MB以下になるので実行もできたのですが、
なぜ最初の状態でgccでコンパイル、実行したときは1000、1000で出来たものが
上記のように修正した結果スタックオーバーフローが出るのでしょうか?

どなたかご存知の方いますでしょうか?
928デフォルトの名無しさん:2005/07/29(金) 03:33:44
>>927
まずbmp.hのcolor data[なんちゃら][うんちゃら]は定義。
そしてtest0.cのimgは静的変数なんでスタックには配置されない。
だからスタックオーバーフローにもならない。

あとの修正なんちゃらは、シラネ。まあがんがれや。
929デフォルトの名無しさん:2005/07/29(金) 03:38:00
普通にコンパイル通るな。
g++でコンパイルするとmain()に型がないから怒られるけど。
930デフォルトの名無しさん:2005/07/29(金) 03:40:32
つか、これC/C++の話だな。
931927:2005/07/29(金) 11:29:07
>> test0.cのimgは静的変数なんでスタックには配置されない。

とのことなのですが、なぜか

  5 [main] img 1980 handle_exceptions: Exception: STATUS_STACK_OVERFLOW
634 [main] img 1980 open_stackdumpfile: Dumping stack trace to img.exe.stack dump

のようなエラーが出てしまいます。
スレ違いとのご指摘がありましたのでc言語のほうへ行ってきます。
932デフォルトの名無しさん:2005/07/29(金) 11:57:18
http://coconut.sys.eng.shizuoka.ac.jp/bmp/#lib
ここにある、bmp.h、bmp.c、test0.c(test1.c)をcygwin+gccでコンパイル+実行すると、きちんとbmpが
作成されたんですが、これを自分なりに修正していくうちにスタックオーバーフローが出るようになりました。
以下はその修正したのを省略したものです。

img.c
------------
#include "bmp.h"

int main(int argc, char** argv) {
 img tmp;
 return 0;
}
-------------
bmp.h
-------------
#define MAXWIDTH 1000
#define MAXHEIGHT 1000

typedef struct {
 unsigned char r;
 unsigned char g;
 unsigned char b;
} color;

typedef struct {
 color data[MAXHEIGHT][MAXWIDTH];
} img;
--------------
933932:2005/07/29(金) 11:58:18
すいません、2chブラウザを使っていて同じタブのままレスしてしまいました。
934デフォルトの名無しさん:2005/07/29(金) 12:51:10
スタックのサイズなんて実行環境によって違うんだから当たり前だろ
935デフォルトの名無しさん:2005/07/29(金) 13:22:55
実行環境以前に Cを理解してないのが問題なので、
もうここでは止める、がよろし。
936デフォルトの名無しさん:2005/07/29(金) 23:57:41
UNIT GenieList;

INTERFACE

USES
SANE, DialogUtils, GFiles, GCommonDec;

PROCEDURE MAIN (lMessage: INTEGER;
lSelect: BOOLEAN;
lRect: Rect;
lCell: Cell;
lDataOffset, lDataLen: INTEGER;
lHandle: ListHandle);

IMPLEMENTATION

PROCEDURE MAIN (lMessage: INTEGER;
lSelect: BOOLEAN;
lRect: Rect;
lCell: Cell;
lDataOffset, lDataLen: INTE

これ何言語かわかりますか?
ファイルの拡張子は.pです。
937デフォルトの名無しさん:2005/07/30(土) 00:08:13
>>936
PASCALじゃないか?
938デフォルトの名無しさん:2005/07/30(土) 01:53:50
ひょっとしたらCかもしれんけどな
ttp://www.pro.or.jp/~fuji/computerbooks/c/c.modula2.html

pseudo_pas.h がどこかに隠れてないか探してみろ
939デフォルトの名無しさん:2005/07/30(土) 02:52:01
>>936
つまらん。氏ね。
940デフォルトの名無しさん:2005/07/31(日) 12:59:10
cygwinの最新版をフルインストールしたらsysvinit.shを実行するところでフリーズ。
そのまま一晩放置したところ、空き容量30GByteのハードディスクが満杯に。
復帰するのに3日かかったよ・・・
941デフォルトの名無しさん:2005/08/01(月) 15:54:09
cygwin, gcc ver 3.4.4にてプロファイラが使いたいと思っています。
/*proftest.c*/
#include <string.h>

int main(void)
{
char ss[80] = "abcdefgh";
char str[80] = "ABCDEFGH";
int i;
for(i=0;i<10000;i++){
strcmp(ss, str);
strncmp(ss, str, 8);
}
return 0;
}

こんなサンプルコードなんですがどうやったらプロファイルができるのか分かりません。

↓のようなコマンドでやってみたりもしましたが
$ gcc proftest.c -p -o proftest

下記のような変なエラーが出てしまいます。
どうすればいいんでしょうか

/*変なエラー*/
/cygdrive/c/DOCUME~1/giko/LOCALS~1/Temp/ccmOHUj1.o:proftest.c:(.text+0x9): u
ndefined reference to `_mcount'
/cygdrive/c/DOCUME~1/giko/LOCALS~1/Temp/ccmOHUj1.o:proftest.c:(.text+0x20):
undefined reference to `_mcount'
/cygdrive/c/DOCUME~1/giko/LOCALS~1/Temp/ccmOHUj1.o:proftest.c:(.text+0x35):
undefined reference to `_mcount'
〜〜以下略〜〜
942デフォルトの名無しさん:2005/08/01(月) 20:08:48
MinGWのcfgmgr32.hってちゃんと動く?
ttp://support.microsoft.com/default.aspx?scid=kb;ja;JP259697
をやりたいのだが機能しないような…?
943デフォルトの名無しさん:2005/08/01(月) 20:56:26
>>941
-pじゃなくて-pgを試してみたら。


944デフォルトの名無しさん:2005/08/01(月) 21:09:44
$ gcc proftest.c -pg -o proftest
>943さん
このコマンドでコンパイルできました、ありがとうございます。

ですが、
$./prof, $profとしても
bash: ./prof: No such file or directory
と言われてしまい目的が果たせません。

プロファイラを実行するのに必要なコマンドってありますか?
945デフォルトの名無しさん:2005/08/01(月) 21:37:54
>>944
gprof

その質問を見るに、なんだか基礎知識が激しく不足してそうね。
946デフォルトの名無しさん:2005/08/01(月) 22:43:04
>>944
$ gcc -pg -o proftest proftest.c
$ ./proftest
$ gprof ./proftest > proftest.gprof
でどう?
947デフォルトの名無しさん:2005/08/02(火) 11:05:16
できた、できた、できました〜〜
>946さんありがとうございます。

精進してきます。
9481:2005/08/02(火) 12:56:06
>>950
次スレよろ
それとタイトル直してくだちい
cygwin + mingw + gcc相談室ね
949デフォルトの名無しさん:2005/08/02(火) 13:43:43
MinGWだとWinows、mingwだとクロス環境をイメージしてしまう。
cygwin上だからクロスだろ、と言われるとそうかなと思ったり思わなかったり。
950デフォルトの名無しさん:2005/08/05(金) 04:16:00
>948
当方plala。合点承知した!
951デフォルトの名無しさん:2005/08/05(金) 16:52:42
コンソールを表示するDLLって生成できますか?
952デフォルトの名無しさん:2005/08/05(金) 21:44:59
もっと噛み砕いて、
それどう解釈する?DLLだとなぜできないと?
953951:2005/08/06(土) 02:09:14
あ、思いっきり説明不足だな…すまん…orz
DLLのデバッグにSTDOUT(printf等)を使いたい
プラグインなので親アプリ側で作るのは不可能

で、DLL側でコンソールを表示させられないかと…
954デフォルトの名無しさん:2005/08/06(土) 02:13:21
リストコントロールでもええんちゃうの?Cygwinじゃ多少めんどくさいけど。
955デフォルトの名無しさん:2005/08/06(土) 02:31:27
ファイルにでも出力するとか
956デフォルトの名無しさん:2005/08/06(土) 03:16:27
ファイルにappendで出力して tail -f が一番簡単
957951:2005/08/06(土) 03:32:47
使っているライブラリの出力先がSTDOUT及びSTDERRなのでこれらのメッセージを取れないと
意味ないんです(インタプリタの組み込みをやっているので…)

STDOUTをリストコントロールとかファイルに出力する方法ってあるんですか?
958デフォルトの名無しさん:2005/08/06(土) 03:42:10
959デフォルトの名無しさん:2005/08/06(土) 06:04:11
AllocConsole()とかじゃ駄目なの?
960デフォルトの名無しさん:2005/08/06(土) 06:56:07
stdoutなりstderrなりをファイルにすればいいだけでは?
961デフォルトの名無しさん:2005/08/06(土) 09:16:29
>>957
リダイレクト
962デフォルトの名無しさん:2005/08/07(日) 10:25:48
>>957

freopen ()

963デフォルトの名無しさん:2005/08/10(水) 02:42:53
gcc-4.1-20050806がビルドできないorz
次のsnapshot待つしかないんですかね…?

../../gcc/libgcc2.c:772: error: unrecognizable insn:
(insn 30 29 31 2 ../../gcc/libgcc2.c:769 (set (subreg:SI (reg:DI 202) 0)
        (if_then_else:SI (eq:SI (reg:SI 203)
                (const_int 0 [0x0]))
            (subreg:SI (reg:DI 202) 0)
            (subreg:SI (reg:DI 202) 4))) -1 (nil)
    (expr_list:REG_NO_CONFLICT (reg/v:DI 200 [ x ])
        (expr_list:REG_NO_CONFLICT (reg/v:SI 198 [ i ])
            (nil))))
../../gcc/libgcc2.c:772: internal compiler error: in extract_insn, at recog.c:20
84
964デフォルトの名無しさん:2005/08/20(土) 14:09:01
MSDNヘルプにCのライブラリを使う場合は
CreateThreadじゃなくて_beginthreadexを使えって書いてあるんですが、
これって"msvcrtを使う場合は"っていう意味でしょうか?
だとしたらcygwinではCreateThreadを使っても問題無しで
mingwでは_beginthreadexを使わなければメモリリーク発生の可能性があり
BCCとか他のVCランタイム使わないコンパイラでは
もちろんCreateThreadで問題無いということでしょうか?
965デフォルトの名無しさん:2005/08/20(土) 14:27:36
CreateThreadはスレッドだけ作ってランタイムの初期化が行われないって
だけだから、結局ランタイムを使いたいときは環境ごとにやり方を調べる
しかない。

Cygwinはpthreadを使わないときつかったような。
966デフォルトの名無しさん:2005/08/21(日) 18:54:54
日本語のMSDNだとCランタイム使用すると必ずリークするみたいに書いてあるけど、
↓にはもう少し詳しい説明があるね

ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createthread.asp

A thread in an executable that calls the C run-time library (CRT)
should use the _beginthread and _endthread functions for thread
management rather than CreateThread and ExitThread; this requires
the use of the multi-threaded version of the CRT. It is safe to call
CreateThread and ExitThread from a thread in a DLL that links to the
static CRT as long as the thread does not call the
DisableThreadLibraryCalls function.
967デフォルトの名無しさん:2005/08/22(月) 00:34:20
ちょっと、ここの人とは環境違うみたいだが・・・適当な場所が思いつかんので・・・誘導プリーズ。
ホストVine Linux、ターゲットi386-mingw32でgccをコンパイルしたら
sys/wait.hがないと怒られるんだが・・・
へるぷみー
968デフォルトの名無しさん:2005/08/22(月) 07:29:06
GCC自体の話ならこっちかな?
http://pc8.2ch.net/test/read.cgi/tech/1121146723/

素人目にはconfigureでバグorミスってる気がする。
mingwでwait(2)なんて使えるわけないし。
969デフォルトの名無しさん:2005/09/01(木) 12:04:47
保守
970デフォルトの名無しさん:2005/09/06(火) 02:46:38
VCから乗り換えで、cygwinでgccを使い始めたばかりなのですが、
gcc -o test test.c
で生成されたtest.exeはクリックするとcygwin.dllがありませんと出てしまいます。
いわゆるリリース版は、どのように生成すればよいのでしょうか?
御指南をお願いします。
971デフォルトの名無しさん:2005/09/06(火) 03:27:05
>>970
それでリリース版だよ。
VCでコンパイルしたらkernel32.dllやuser32.dllに依存するでしょ。それと似たようなもの。
cygwinで普通にコンパイルするとcygwin.dllに依存した形になるので、
cygwin.dllがパスの通る位置においてある必要がある。
972デフォルトの名無しさん:2005/09/06(火) 03:42:59
-mno-cygwin
973デフォルトの名無しさん:2005/09/06(火) 05:59:14
cygwin1.dll
974970:2005/09/06(火) 21:22:13
できました。ありがとうございます。m(_ _)m
975デフォルトの名無しさん:2005/09/06(火) 22:38:57
>>974
Cygwin固有のUNIXシステムコールを使う気が無いのなら、MinGWがおすすめ。
976デフォルトの名無しさん:2005/09/06(火) 23:49:37
すなわちそれが mingw
977デフォルトの名無しさん:2005/09/07(水) 12:54:17
すなわちそれが mingwn
次スレもこのままのスレタイで行こうじゃないか

>>980
次スレよろ
978デフォルトの名無しさん:2005/09/07(水) 13:23:13
チキンレース!!!
979デフォルトの名無しさん:2005/09/07(水) 15:41:59
↓よろしく
980デフォルトの名無しさん:2005/09/07(水) 23:14:42
おっ立ててきます。
981デフォルトの名無しさん:2005/09/07(水) 23:30:11
次スレ
cygwin + mingwn + gcc 相談室 Part2
http://pc8.2ch.net/test/read.cgi/tech/1126103347/
982977:2005/09/07(水) 23:33:02
>>980
983デフォルトの名無しさん:2005/09/07(水) 23:37:40
984デフォルトの名無しさん
>>982
こら!

>>980-981
おつ