1 名前:デフォルトの名無しさん [2007/04/30(月) 23:52:47 ] Windows上で動作するフリーの開発環境 CygwinとMinGWに関する相談スレッドです。 過去スレ: cygwin + mingwn + gcc 相談室 Part2 pc11.2ch.net/test/read.cgi/tech/1126103347/ cygwin + mingwn + gcc 相談室 pc8.2ch.net/test/read.cgi/tech/1058134693/ 関連サイト: Cygwin www.cygwin.com/ MinGW www.mingw.org/ 関連スレッド: GCCについて part7 pc11.2ch.net/test/read.cgi/tech/1145357824/ 【激遅】AppleGCC【絶望】 pc11.2ch.net/test/read.cgi/tech/1173267844/
488 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 18:01:35 ] >>482 input-charset を CP932 として使っていながら、欧州由来のコードで CP932的に不正なものを含むソースをコンパイルしたんだと思う。 ffmpegの何かのヘッダとか。
489 名前:デフォルトの名無しさん [2008/01/20(日) 14:26:15 ] エクスプローラーを使っているときに 今見ているフォルダでCgywin窓を開きたいのですが どうしたらいいですか?
490 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 15:01:59 ] アドレスバーからコピーして、cdすれば?
491 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 15:39:29 ] >>489 cygwin hereでググれ
492 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 19:41:55 ] 俺はこうしてる [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\WinHandPrompt] @="Zsh(&C)" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\WinHandPrompt\command] @="cmd.exe /F:on /K \"cd %L&&zsh\""
493 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 21:47:51 ] 窓の手の流用か
494 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 02:51:02 ] あれ、なんでばれたんだろう? 、と思ったら書いてあったねハッキリと
495 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 01:51:09 ] MSYSからgetchとかkbhitを拾うのはどうしたらいい? コマンドプロンプトではできることが MSYSでは上手くいかないことが意外に多い printfは必ずfflushも書かないと表示されないし・・・(TT
496 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 05:18:27 ] 毎回のようにfflushするくらいならsetvbufに_IOLBFしとけ。 で、getchやkbhitはC/C++にもPOSIXにも準拠していないし、Win32にも無い。 強いて言えば、DOSのデファクトスタンダードだったので残してある、というだけ。 Win32APIを使わないとするなら、 conio.hじゃなくてcursesとかを使うんじゃないの?知らないけど。
497 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 11:11:00 ] >>495 >printfは必ずfflushも書かないと表示されないし・・・(TT リダイレクトする用途を考慮しなくていいなら、printf()ではなくfprintf(stderr, ...)したまえ。
498 名前:デフォルトの名無しさん [2008/01/26(土) 15:58:13 ] いま操作しているPC(ネットワーク上でのコンピュータ名はPC1)のcygwin(以下cygwin1)から sshでほかのPC(ネットワーク上でのコンピュータ名はPC2)のcygwin(以下cygwin2)にログインして \\PC1\Shareにアクセスしようとすると"-bash: cd: \\yy-x60s\Share: Permission denied"と言われてしまいます cygwin2から直接"cd \\\\PC1\\Share"を実行するとこちらは成功します cygwin2で"setfacl -m user:SYSTEM:rwx \\\\PC1\\Share"を実行して 直後に"getfacl \\\\PC1\\Share"を実行すると # file: \\PC1\Share # owner: pc2user # group: なし user::rwx group::r-x other:r-x mask:rwx とでていて設定が反映されてないことが原因なような気がするのですが、どのように設定するばよいか分かりません
499 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 15:58:46 ] そういえばstderrはバッファリングされないからflushする必要もないよね
500 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 16:13:01 ] でなきゃ困るだろ.そもそも >printfは必ずfflushも書かないと表示されないし・・・(TT は,それが当たり前だということを知らずに泣いてるだけの話だろ
501 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 19:20:24 ] >>495-496 MSYS では、ってのは rxvt では、ってことだよね。 pdcurses の getch を使うプログラムを書いて試してみたけど rxvt ではダメっぽい。 LINES value must be >= 2 and <= -4096: got 1 initscr(): LINES=1 COLS=1: too small. とか出てプログラムが異常終了する。 ググってみると lynx や aspell で同じ問題が起こっているみたい。 rxvt では (pd)curses は NG。
502 名前:デフォルトの名無しさん [2008/01/30(水) 21:32:07 ] 質問です。非常に初歩的ですみません。 ジョークコマンド sl を、Cygwin や その他 dll 等に依存しない、exeファイ ル単体で動く形にコンパイルしたいのです。 chaosweb.complex.eng.hokudai.ac.jp/~hagi/contents/memo-cygwin.html#sl freethink.way-nifty.com/action/2006/06/gnuwin32_6362.html これらを参考に、Mingw、GnuWin32 をそれぞれフルインストールしました。 makefile の -lcurses と sl.c の usleep を書き換えました。 また、makefile を CC=c:/mingw/bin/gcc.exe と書き換えました。 そこから先が分かりません。 gnuwin32 のコマンドプロンプトから、makeを実行すると、以下のようなエラー が出ます。 gcc -O -o sl sl.c -lpdcurses -ltermcap sl.c:30:20: curses.h: No such file or directory sl.c: In function `my_mvaddstr': sl.c:42: error: `ERR' undeclared (first use in this function) sl.c:42: error: (Each undeclared identifier is reported only once ...(略) ということで質問です。GnuWin32 の termcap と pdcurses を、MinGW から利 用できるようにするには、どのように何を設定したらいいのでしょうか?
503 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:04:14 ] >>502 gcc の -I オプションで curses.h があるディレクトリを指定
504 名前:502 mailto:sage [2008/01/30(水) 23:57:09 ] >>503 ありがとうございます。makefileのCFLAGSを以下のように修正したところ、 CFLAGS=-O -I "/Program Files/gnuwin32/include/" 一歩前進し、今度はこんなエラーが出るようになりました。 c:\mingw\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\mingw32\bin\ld.exe: cannot find -lpdcurses collect2: ld returned 1 exit status make: *** [sl] Error 1 今度はどこに何を設定したら良いでしょう?
505 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 00:01:20 ] 1を聞いて10を知れ、とは言わないがちょっとな・・・
506 名前:502 mailto:sage [2008/01/31(木) 00:46:02 ] ごめんなさい、図々しいお願いですね。 gcc の man を見ているのですが、ライブラリの検索パスを追加するオプショ ンが見つかりません。 また、C:\Program Files\gnuwin32 の下に pdcurses に相当するライブラリが あるのかと思ったのですが、libpdcurses.a というファイルが見つかりません。 行き詰ってしまいました。
507 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 00:49:24 ] -L でしょ?
508 名前:502 mailto:sage [2008/01/31(木) 01:08:26 ] うわあ、これは恥ずかしい。申し訳ありません。 日本語manを"ライブラリ"で検索していたので見つかりませんでした。 c:\program files\gnuwin32\lib に pdcurses がなく、curses があったので、 Makefile を元に戻しました。 --- sl.c ---- /* usleep(20000); */ sleep(1); ここで今、こんなエラーが出ています。 c:\DOCUME~1\ユーザ名\LOCALS~1\Temp/ccGQbaaa.o:sl.c:(.text+0x1a4): undefined reference to `sleep' collect2: ld returned 1 exit status たぶん、正しいヘッダをインクルードすればいいと思うのですが。
509 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 01:48:36 ] >>508 > たぶん、正しいヘッダをインクルードすればいいと思うのですが。 そう思うんだったら、includeディレクトリの中でsleep()の宣言を探す べきでしょ。たぶん無いけど。
510 名前:502 mailto:sage [2008/01/31(木) 02:01:22 ] おっしゃるとおりです。見つかりませんでした。 /MinGw/include には何もなく、 /Program Files/gnuwin32/include には glibc/unistd.h に sleep() がありましたが、includeすると大量のエラー。 winx/timex.h に nanosleep() がありましたが、 undefined reference to `nanosleep' のエラーが出ます。 /cygwin/include でも見つからなかったので、どうも方針がまずいようです。 Cygwin 上だと何もせずにコンパイル、実行できましたので。 今日はいったん中止します。
511 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 08:33:38 ] このまま続けると嫌われるよ。 おそらく、初心者板の方が適している質問と思われ。 # -Iや-Lオプションなんて、cc時代から定番のオプションだし。 # CygwinやMinGWの問題か切り分けられて無いし。
512 名前:502 mailto:sage [2008/01/31(木) 13:11:55 ] ごめんなさい、では最後に一点だけ。 /* usleep(20000); */ この行をコメントアウトすると、コンパイルは通るようになりました。まあ実 行すると、一瞬で終わってしまうのですが。 ただし、カレントディレクトリに curses2.dll を必要とします。exeファイル のみで実行できるようにならないでしょうか? 見よう見まねで gcc に -static オプションを付けてみましたが、大量にコン パイルエラーが出てしまいます。 c:\DOCUME~1\ユーザ名\LOCALS~1\Temp/ccy2baaa.o:sl.c:(.text+0x34): undefined reference to `_imp__stdscr' c:\DOCUME~1\ユーザ名\LOCALS~1\Temp/ccy2baaa.o:sl.c:(.text+0x4f): undefined reference to `imp( *) static' c:\DOCUME~1\ユーザ名\LOCALS~1\Temp/ccy2baaa.o:sl.c:(.text+0x6b): undefined reference to `_imp__stdscr'
513 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 13:17:19 ] >>512 そのpdcursesにスタティックリンク用のライブラリが添付されてない限 り、キミには無理。
514 名前:502 mailto:sage [2008/01/31(木) 13:22:08 ] ありがとうございました。dllは諦めます。 あとはusleep(20000)ですが、これはどこか初心者スレを探して質問します。
515 名前:502 mailto:sage [2008/01/31(木) 15:17:52 ] 先ほどの者ですが、解決しました。 #include <windows.h> ... Sleep(20); Windowsプログラミングに詳しい知人にアドバイスされ、このように修正したと ころ、見事に動くようになりました。 どうもお騒がせしてすみませんでした。ありがとうございました。
516 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 15:59:00 ] 最初からそいつに聞け糞が そいつはそいつで、掲示板で聞けようぜえ と思ってるだろうがな
517 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 16:23:57 ] 「mingw sleep」でググるだけで、ヒントがたくさん出てくるんだけどなあ。
518 名前:502 mailto:sage [2008/01/31(木) 18:53:51 ] ごめんなさい、訳があって急ぎだったので、無神経な質問をしてしまいました。 ご迷惑をおかけしました。 今度Java質問スレで、超初心者にていねいに答えますので、それで埋め合わせ にさせてください。
519 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 20:08:57 ] 人に教えてる暇があったら勉強しろ
520 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 09:18:44 ] 以上 >502 の日記からお伝えしました
521 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 07:20:34 ] Cygwinでcファイルをコンパイルしようとしたところ、 3[main] ? 26824 init cheap: Couldn't reserve 3600336 bytes of space for cygwin's heap, Win32 error 487 というエラーメッセージを4つ吐くのですが、解決策はありますでしょうか? ググってみて、再インストールもしてみたのですができませんでした… WinXP Home SP2 RAM DDR SDRAM 512MB
522 名前:521 mailto:sage [2008/02/02(土) 08:38:29 ] すみません自己解決しました。 System32にCygwin1.dllがあったのが悪かったようです。
523 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 19:57:57 ] guileのinfoにある例(インタプリタを作るだけ)をmingwでコンパイルしたら sys/select.h ieeefp.h が無いと言われてしまいます。 確かに/includeにも/mingw/includeにもそんなファイルはありゃしませんが。 mingwじゃlibguileは使えないのでしょうか? バージョンは gcc: 3.4.2 guile: 1.8.2 です。
524 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 20:08:18 ] _____ ___ <ー、\\ヾiγ/rニミ \ヾヘヽヽリ川///γ >川/ ̄"""" ̄「リ (ヘir-=o=ッィ=o=j _ハ| `ー/ ii、i <\ ヽヽ `ー′/ \ヽ \  ̄ ̄/∩へ Cygwinじゃ駄目なのか? __ii  ̄/二ノ レ< guileのmakeに必要な環境やライブラリはあるのか? ヘヘヘ\ヽニ>-イ|( Y/) ノ// / ヽ_ノ|ヽハ/) ノ ̄ `ー | |ヒ/
525 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 20:13:56 ] >>524 試しにcygwinでやってみたら、gmpを入れてないのでハネられます。 まあ、gmp入れてcygwinでやればいいだけなんだろうけど。 主力環境がmingwなのでmingwでやりたいなと。
526 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 20:20:56 ] 敗因は2つだ - >>525 は sys/select.h が何なのかわかってない - >>525 は mingw がどんな位置づけにあるものかもわかってない
527 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 20:31:43 ] guileを使うのにPOSIX環境である必然性があるのかな
528 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 21:10:01 ] ないと思うが…
529 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:46:04 ] では、mingwの位置づけ云々は関係ないような。 select.hを使わないようにconfigureできないものか。
530 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:23:46 ] >>529 mingwの位置付けが判っていたら当然そういう風に行動するだろ? ってか guile をビルドの話なのか? guile をビルドするときなら configure --disable-posix とかあった気がするが…
531 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 01:24:34 ] >>530 sourceforgeのmingw用にビルドされたguileをインスコしてlibguileまで一緒に入っているのにselectがないとかもうね、なんなんだと。
532 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 05:34:13 ] じゃあきっとそのlibguileは --disable-posix で作られてるんだろ?
533 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 12:51:39 ] >>532 guileの意義がわかんねーなら上から目線で語るなよwwww
534 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 17:33:53 ] …と、>>533 が最上位から申しております。
535 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:04:39 ] Cygwinでgcovを使いたいのですが、 gccに-mno-cygwinのオプションを付けて実行すると以下のようなエラーが出ます。 test.gcda:Version mismatch - expected 304m got 304c -mno-cygwinを付けてgcovを使うことはできないのでしょうか? Cygwinのバージョンは1.5.25-7です。
536 名前:デフォルトの名無しさん [2008/02/10(日) 03:15:32 ] Cygwin v2.573.2.2で開発しています。C++からperlを使おうと思って、とりあえず下のソースを拾ってきました。 #include <EXTERN.h> #include <perl.h> static PerlInterpreter *my_perl; void main () { char *perl[] = { "", "-e", "printf(\"%x\", 3735928559);" }; my_perl = perl_alloc (); perl_construct (my_perl); perl_parse (my_perl, NULL, 3, perl, (char **)NULL); perl_run (my_perl); perl_destruct (my_perl); perl_free (my_perl); } それを perl_sample.cpp という名前で保存し、 g++ perl_sample.cpp -I/lib/perl5/5.8/cygwin/CORE -L/lib/perl5/5.8/cygwin/CORE と、コンパイルしようとしました。しかし、 /cygdrive/c/Users/hoge/AppData/Local/Temp/ccwiKLdy.o:perl_sample.cpp:(.text+0x40): undefined reference to `_perl_lloc' /cygdrive/c/Users/hoge/AppData/Local/Temp/ccwiKLdy.o:perl_sample.cpp:(.text+0x52): undefined reference to `_perl_construct' /cygdrive/c/Users/hoge/AppData/Local/Temp/ccwiKLdy.o:perl_sample.cpp:(.text+0x7e): undefined reference to `_perl_parse' /cygdrive/c/Users/hoge/AppData/Local/Temp/ccwiKLdy.o:perl_sample.cpp:(.text+0x8b): undefined reference to `_perl_run' /cygdrive/c/Users/hoge/AppData/Local/Temp/ccwiKLdy.o:perl_sample.cpp:(.text+0x98): undefined reference to `_perl_destruct' /cygdrive/c/Users/hoge/AppData/Local/Temp/ccwiKLdy.o:perl_sample.cpp:(.text+0xa5): undefined reference to `_perl_free' collect2: ld returned 1 exit status と、エラーをはきます。perl自体はcygwinのインストール時に入れたものです。perlのlibが無いのかと思い、探しましたが見つからず、また、perlの最新版をコンパイルしようとしましたが失敗しました。ちなみにOSはVistaです。 どのようにすればコンパイルできるようになるのでしょうか?
537 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 05:47:34 ] >>535 www.cygwin.com/ml/cygwin/2007-11/msg00180.html
538 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 08:22:53 ] >>536 ライブラリのサーチパスは指定しているけど、ライブラリそのものを指定していないじゃん。
539 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 09:52:41 ] >>537 Cygwinで-mno-cygwinを使う代わりに本物のMinGWを使うことで解決できました。 ありがとうございました。
540 名前:デフォルトの名無しさん [2008/02/10(日) 13:45:20 ] >>538 ありがとうございました。無事コンパイルすることができ、実行もできました。
541 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 01:17:56 ] ckのソースどっかに落ちとらんかのー
542 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:44:21 ] どぞ www.ch-werner.de/ck/
543 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 10:17:09 ] ん? ck違い!? とりあえずサンクスコ
544 名前:デフォルトの名無しさん [2008/02/23(土) 09:23:36 ] 浮動小数点演算を行なうルーチンをコンソールアプリ(main関数)から呼んだときと Win32 API で書いた GUI アプリから呼んだときとで計算結果が違うという問題に 悩まされています。どなたか解決策をご存じないでしょうか。 問題を再現する、できるだけ小さなプログラムを作りました。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6078.zip 付属の Makefile は MinGW (GNU make)用です。 test1.exe(コンソールアプリ)と test2.exe(GUI アプリ)をビルドして実行します。 どちらも init.c の initialize() を呼び出します。 initialize() は double 型の配列 x を初期化する関数です。 計算結果を見るために x[5] と x[6] をカレントディレクトリの output.txt に書き出しています。 gcc version 3.4.5 (mingw special) では以下のようになりました。 test1.exe x[5] = 4.7474747474747475e-001 x[6] = 4.6969696969696967e-001 test2.exe x[5] = 4.7474747474747475e-001 x[6] = 4.6969696969696972e-001 同じルーチンを呼んでいるのに x[6] の値が異なります。x[5] は一致しています。 比較のために VC++ Toolkit 2003 (nmake.exe) 用の Makefile.vc も入れておきました。 Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86 でコンパイルしたところ2つのプログラムの計算結果が配列 x の全要素について一致しました。 MinGW (gcc) でコンパイルしたときの test2.exe の計算結果と一致しています。 すなわち test1.exe の計算結果がおかしいようです。 どなたか解決策をご存知の方がいらっしゃいましたらご教示下さい。よろしくお願いいたします。
545 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 09:53:13 ] 面倒だからソースは見ていないけど、どちらかはFPUで計算を行いどちらかはSSEで計算を行なっていると思われる。 コンパイルオプションで強制できるから、必要なら強制すればいい。 但し、doubleの精度を超えた領域の話なのでどちらも間違っているとはいえない。
546 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 09:55:30 ] ./test1 4.7474747474747475e-001 4.6969696969696967e-001 ./test2 4.7474747474747475e-001 4.6969696969696967e-001 gcc version 4.1.2 ごめん、役に立てそうも無いw とりあえずmap出力してdiff取ってみたらどうか
547 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 10:01:53 ] アセンブリ出力を見るだけだろ。常考
548 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 10:17:20 ] 同じになっちまった。 .gcc version 3.4.5 (mingw special) /test1 cat output.txt 4.7474747474747475e-001 4.6969696969696967e-001 gcc -o test2.exe -mwindows test2.c init.o ./test2 cat output.txt 4.7474747474747475e-001 4.6969696969696967e-001 gccオプションに--save-temps しかし、同じ.oファイル使ってるから意味ないか。 fprintf(fp, "%hX\n", x[5]); fprintf(fp, "%hX\n", x[6]); これ出力しても結果異なるよね? まぁ、ollydbgあたりでステップ実行すれば原因はわかるかと思う。
549 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 10:20:48 ] そういえば、全然関係ない話だけど MinGWのprintfで、%hhXとかうまく機能しない原因知ってる人いない?
550 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 11:00:51 ] msのcランタイムがc99対応じゃないから
551 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 11:19:49 ] msのランタイムって、FPUの精度を固定していないか? >544はもう一回動かしてもtest1のx[6]は違う値のまま?
552 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:01:31 ] 15桁目まで同じだからdoubleの精度としては問題ない。
553 名前:549 mailto:sage [2008/02/23(土) 12:03:17 ] C99以前ではhhxって使えなかったんだ。 知らなかった。
554 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:18:37 ] x86のFPUは、80ビット精度と64ビット精度が存在する。 SSE2は64ビット精度。 とかそのへんの問題かな? >>551 に一票。 浮動小数点演算の検算で精度気にしすぎると禿げるぞ。 ε使えε
555 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:55:41 ] テキストで出力すると計算の問題なのか出力関数の問題なのか分からんな。 バイナリで出力(あるいは16進ダンプ)してみて どうなるかチェックした方がいいと思う。 例えば fprintf(fp, "%.16e\n", x[5]); これを output(fp, x[5]); にして、output を別翻訳単位で下のように定義してみたらどう? void output(FILE *fp, double value) { union { double value; char array[sizeof (double)]; } dc = { value }; int i; for(i = 0; i < sizeof (double); ++i) { fprintf(fp, "%02X ", dc.array[i]); } fputchar('\n', fp); }
556 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:56:53 ] _controlfp あたりでぐぐれ
557 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:05:31 ] VCとgccのデフォルトのFPU計算精度は異なるらしい homepage1.nifty.com/herumi/prog/prog90.html _controlfpでいじると同じ精度にできる
558 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:11:46 ] おー、それだそれだ、思い出した。
559 名前:544 mailto:sage [2008/02/25(月) 14:04:07 ] 皆さまコメントありがとうございました。>>556-557 の方法で解決いたしました。 使用していた Windows 環境では MinGW でコンパイルしたコンソールアプリは 53 ビット、 MinGW でコンパイルした GUI アプリと VC++ Toolkit 2003 でコンパイルした両アプリは 64 ビットの演算精度を用いていたようです。 別の Windows 環境で試したところ MinGW でも両アプリとも同じ計算結果になりました。 コンソールアプリを MinGW でコンパイルすると演算精度が 53 ビットになる環境がある、 確実を期すなら _controlfp を使え、ということですね。 髪がすこし減ってしまった気がします。本当にありがとうございました。
560 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 14:29:41 ] つーか、doubleの精度以上の処を云々すると禿げるよ。 どうせ微小誤差が付き纏うんだから適当な桁で丸めて表示するとかしないと。
561 名前:544 mailto:sage [2008/02/25(月) 15:57:08 ] >>560 おっしゃる通りです。 今回の件が気になってしまったのは、シミュレーションコードのデバッグ中だったためです。 実行環境やコンパイラが違ったら気にしないところですが、同じ環境で同じオブジェクトコードに 同じ入力データを与えているにも関わらず計算結果が違うことにとまどってしまいました。 原因はdoubleの範囲を越えた部分の誤差でしたが、この問題を調べるきっかけになった シミュレーション結果の違いはもっと有意な差だったので看過できませんでした。 育毛にはげみます。
562 名前:554 mailto:sage [2008/02/25(月) 21:54:36 ] >>561 > シミュレーション結果の違いはもっと有意な差だったので 俺は予言する もまいは禿げる。 肝心のアルゴリズム、あるいはテストベクタが草ってんじゃない?
563 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 22:13:26 ] >>561 IEEEに準拠するように80bitではなく強制64bitにするオプションがあったはずだが
564 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 13:18:47 ] >>563 >556-559
565 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 14:03:31 ] そんなあなたを禿増してあげましょう
566 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 02:29:06 ] >>541 発見しますた ttp://sohda.net/cygwin/dist/mirror/www.geocities.jp/meir/cygwin_ck/
567 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 09:16:50 ] OS再インスコしてdevcpp+SDLで以前のソースコンパイルしたらWinMain@16なエラーが('A`) int main(ryから始めてるし-mwindowsも付けてるのに cygwinでもインスコすれば変わるかなあ
568 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 10:14:40 ] -lSDLmain付け忘れ&-l順番ミスでしたサーセン SDL外したらコンパイル通って、sdl-config見てやっと思い出した
569 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 17:59:52 ] 相談じゃなくて雑談になるんだけど g++4.3.0をビルドしてみたんだけど、g++のbinが460,475ってでかくね? cygwinのインストーラからのg++3.4.4は96,789、verうpとかモジュール化とか考えてもねぇ。 とか思いながら動作テストで↓コンパイルしたら、2,339,843、メガってどうなの。(ちなみに3.4.4でも477,682、g++4.3.0binよりでけぇ #include <iostream> int main(){return0;} これって一体何がバイナリに組み込まれてるのか気になるんだけど、分かる人教えてー、誘導だけでもいいから。 ちなみに#include<iostream>だけ消したら3.4.4が7,673、4.3.0が10,915と小さくなった。(勿論gccじゃなくてg++で
570 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 18:09:00 ] stripしろよ ライブラリのdebug infoもな
571 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 18:30:48 ] なるほど、どうもー。
572 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 07:07:47 ] g++ 普通にビルドできるのか? それならなんで Cygwin のパッケージは 3.4 のままいっこうに動かないんだろう。
573 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 13:33:08 ] そのうち、stripしてもまだサイズがでかいがどうしてだ? といった ググれば5秒で分かるFAQを聞きに戻ってきそうだ
574 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 14:25:42 ] 嫌味だけは一丁前でな
575 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 17:16:47 ] >>572 できたよー そういや俺も昔クロスコンパイラ作ろうとしたけどビルド出来なかった覚えがあるな そんときは原因分からず仕舞いやったけど cygwinのパッケージはlinuxでビルドされてるらしいから3.4で動かない原因は別なんじゃない?
576 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 06:08:53 ] Windows XP SP2 上で Cygwin gcc 3.4.4 の MinGW モードで開発してるんですが、 システムメニューの項目を EnableMenuItem() を使ってグレーアウトさせようとしてもできません。 具体的には、ウィンドウプロシージャで WM_CREATE を受け取ったとき EnableMenuItem(GetSystemMenu(hWnd, FALSE), SC_MOVE, MF_GRAYED); としても、システムメニューの「移動」がグレーアウトせず、有効なままになってしまいます(実際にウィンドウ移動もできる)。 MF_GRAYED を MF_DISABLED にしても同様で、システムメニューからウィンドウ移動ができてしまいます。 DeleteMenu(GetSystemMenu(hWnd, FALSE), SC_MOVE, MF_BYCOMMAND); ならば正常に機能し、項目が削除されるんですが…。 似たような環境で EnableMenuItem() によるシステムメニュー項目のグレーアウトができている方がいれば 方法など教えていただけないでしょうか?
577 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 06:18:22 ] すみません。追記です。 EnableMenuItem(GetSystemMenu(hWnd, FALSE), SC_CLOSE, MF_GRAYED); は正常に機能し、システムメニューの「閉じる」とタイトルバーの×ボタンがグレーアウトするようです。 となると「移動」とか「サイズ変更」がグレーアウト/無効化できないのは Windows API 自体の仕様なんですかね? もしそうだったらスルーしてください。Cygwin + MinGW 環境固有の問題かと早合点してしまったので。
578 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 17:36:49 ] Win32 API スレの管轄だろうな。 ま、それはともかく設定するタイミングが駄目だと思う。 ttp://msdn.microsoft.com/library/ja/jpwinui/html/_win32_getsystemmenu.asp?frame=true >GetSystemMenu > >状況によって、システムはウィンドウメニューの標準的なメニュー項目の一部を自動的に淡色表示にします。 >アプリケーションは、どのメニューも表示されていないうちに WM_INITMENU メッセージに応答することにより、 >メニュー項目を独自に選択したり淡色表示にすることができます。 ということで、WM_INITMENU でやればいいと思う。っつーか、普通のメニューでも項目の無効化等はそこでやると思うんだけど。
579 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 13:20:29 ] >>578 スレ違いの質問にお答えいただいて恐縮です。 仰る通り WM_INITMENU を受け取ったときに設定することで「移動」「サイズ変更」もグレーアウトさせることができました。 ただし、WM_INITMENU メッセージでは wParam に対象メニューハンドルが格納されるらしいのですが、 システムメニューに関してはこれは当てはまらないようです。なので、 if(wParam == (WPARAM)GetSystemMenu(hWnd, FALSE)){ ... } などとすると if 文の中身は決して実行されないようです。 よって、システムメニューを設定するだけなら wParam は無視すべき、ということみたいです。
580 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 13:46:42 ] WM_INITMENUPOPUPなら見分けがつくんでない?
581 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 14:43:40 ] >>580 アドバイスありがとうございます。やってみましたが、 if(HIWORD(lParam) == 1){ ... } というテストはうまくいくものの、wParam にはシステムメニューのハンドルが入っていないようです。 ですので、EnableMenuItem() などに渡すメニューハンドルはやはり GetSystemMenu() を使って自前で取得しなければ ならないようです。 また、WM_INITMENUPOPUP を受け取ったときに EnableMenuItem() を呼ぶと、タイトルバーから初めてシステムメニュー を呼び出したとき、システムメニューの表示位置が若干上にずれて、タイトルバーを覆い隠すような形で出てくるようです。 まあ2回目以降は正常に戻るので、気にするほどのことではないかもしれないですが…。 あと、WM_INITMENU の場合は対象がシステムメニューかどうか見分けが付かないので、自分で初回スイッチのような ものを用意して対処する必要がありそうですね。 それと、さっき色々試していて気が付いたのですが、WM_INITMENU または WM_INITMENUPOPUP を受け取ったときに EnableMenuItem() する方法だと、タスクバーを初めて右クリックしたときに項目が無効にならないようです。 2回目以降、もしくは初回であっても事前にタイトルバーからシステムメニューを表示させていれば EnableMenuItem() の設定が反映されるんですが…。 調べてみたところ、タスクバーが右クリックされたときには非公開メッセージ 0x313 が送られてくるとの情報があったので、 (参考: www.hey-to.net/ML-archive/vcppML/1999/msg03694.html ) 0x313 を捕捉し、そのハンドラで EnableMenuItem() などの設定を行い、 さらに DefWindowProc() にメッセージを処理させればよい…みたいです。 >>576 の環境でしかテストしていないのであまり自信がないですが、これだと一応タスクバー初回右クリック時も正しく 項目が無効化されたシステムメニューが表示されます。 とはいえ、非公開メッセージに依存するのも微妙な感じなので、いっそ WM_CREATE のハンドラで無効にしたい項目を DeleteMenu() してしまうのが一番簡単かもしれないですね。 長文失礼しました。Windows って難しいです。
582 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 15:22:25 ] >>581 Win32 API スレいって揉まれてくるといい
583 名前:デフォルトの名無しさん [2008/04/01(火) 13:51:30 ] cygwinでopenmpは使える??
584 名前:デフォルトの名無しさん [2008/04/01(火) 18:57:24 ] >>581 これじゃダメなんかい? DWORD dwStyle = GetWindowLong(hWnd, GWL_STYLE) & ~WS_SIZEBOX; SetWindowLong(hWnd, GWL_STYLE, dwStyle);
585 名前:デフォルトの名無しさん [2008/04/03(木) 15:23:40 ] windows2k MinGW を入れたいのです MinGWインストーラがネット無いので使えません ソースフォージからどれを落とせば良いでしょうか またそれは全て同じフォルダに上書きで良いでしょうか binフォルダなどかぶっているものがおおいんです 使いたいのはC、C++、SDL、OpenGLです パスは適当に通そうと思っています
586 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 17:14:48 ] MinGWインストーラはDownload Onlyを選べば、落とすだけを選択できるぞ あとは上書きで桶
587 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 17:18:07 ] >>586 おおありがとう! じゃあ遠かったHelloWorldも近づきますノシッ
588 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 13:50:57 ] ちょっとお聞きしたいのですが、mingwでは-Iオプションは使えないのでしょうか? g++ --help でリストに出てこないのです。 しかしg++ -I とすると argument to `-I' missing のような感じで、unrecognize option `-j' みたいな感じではでてこないので、使えるような気もするのですが・・