元スレCygwin + MinGW + GCC 相談室 Part 3
gcc覧 / PC版 /みんなの評価 : ★
501 = :
>>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 = :
質問です。非常に初歩的ですみません。
ジョークコマンド sl を、Cygwin や その他 dll 等に依存しない、exeファイ
ル単体で動く形にコンパイルしたいのです。
http://chaosweb.complex.eng.hokudai.ac.jp/~hagi/contents/memo-cygwin.html#sl
http://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 = :
>>502
gcc の -I オプションで curses.h があるディレクトリを指定
504 = :
>>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 = :
1を聞いて10を知れ、とは言わないがちょっとな・・・
506 = :
ごめんなさい、図々しいお願いですね。
gcc の man を見ているのですが、ライブラリの検索パスを追加するオプショ
ンが見つかりません。
また、C:\Program Files\gnuwin32 の下に pdcurses に相当するライブラリが
あるのかと思ったのですが、libpdcurses.a というファイルが見つかりません。
行き詰ってしまいました。
508 = :
うわあ、これは恥ずかしい。申し訳ありません。
日本語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 = :
>>508
> たぶん、正しいヘッダをインクルードすればいいと思うのですが。
そう思うんだったら、includeディレクトリの中でsleep()の宣言を探す
べきでしょ。たぶん無いけど。
510 = :
おっしゃるとおりです。見つかりませんでした。
/MinGw/include には何もなく、
/Program Files/gnuwin32/include には
glibc/unistd.h に sleep() がありましたが、includeすると大量のエラー。
winx/timex.h に nanosleep() がありましたが、
undefined reference to `nanosleep' のエラーが出ます。
/cygwin/include でも見つからなかったので、どうも方針がまずいようです。
Cygwin 上だと何もせずにコンパイル、実行できましたので。
今日はいったん中止します。
511 = :
このまま続けると嫌われるよ。
おそらく、初心者板の方が適している質問と思われ。
# -Iや-Lオプションなんて、cc時代から定番のオプションだし。
# CygwinやMinGWの問題か切り分けられて無いし。
512 = :
ごめんなさい、では最後に一点だけ。
/* 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 = :
>>512
そのpdcursesにスタティックリンク用のライブラリが添付されてない限
り、キミには無理。
515 = :
先ほどの者ですが、解決しました。
#include <windows.h>
...
Sleep(20);
Windowsプログラミングに詳しい知人にアドバイスされ、このように修正したと
ころ、見事に動くようになりました。
どうもお騒がせしてすみませんでした。ありがとうございました。
516 = :
最初からそいつに聞け糞が
そいつはそいつで、掲示板で聞けようぜえ
と思ってるだろうがな
517 = :
「mingw sleep」でググるだけで、ヒントがたくさん出てくるんだけどなあ。
518 = :
ごめんなさい、訳があって急ぎだったので、無神経な質問をしてしまいました。
ご迷惑をおかけしました。
今度Java質問スレで、超初心者にていねいに答えますので、それで埋め合わせ
にさせてください。
519 = :
人に教えてる暇があったら勉強しろ
520 = :
以上 >502 の日記からお伝えしました
521 = :
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
523 = :
guileのinfoにある例(インタプリタを作るだけ)をmingwでコンパイルしたら
sys/select.h
ieeefp.h
が無いと言われてしまいます。
確かに/includeにも/mingw/includeにもそんなファイルはありゃしませんが。
mingwじゃlibguileは使えないのでしょうか?
バージョンは
gcc: 3.4.2
guile: 1.8.2
です。
524 = :
_____ ___
<ー、\\ヾiγ/rニミ
\ヾヘヽヽリ川///γ
>川/ ̄"""" ̄「リ
(ヘir-=o=ッィ=o=j
_ハ| `ー/ ii、i
<\ ヽヽ `ー′/
\ヽ \  ̄ ̄/∩へ Cygwinじゃ駄目なのか?
__ii  ̄/二ノ レ< guileのmakeに必要な環境やライブラリはあるのか?
ヘヘヘ\ヽニ>-イ|( Y/)
ノ// / ヽ_ノ|ヽハ/)
ノ ̄ `ー | |ヒ/
525 = :
>>524
試しにcygwinでやってみたら、gmpを入れてないのでハネられます。
まあ、gmp入れてcygwinでやればいいだけなんだろうけど。
主力環境がmingwなのでmingwでやりたいなと。
528 = :
ないと思うが…
529 = :
では、mingwの位置づけ云々は関係ないような。
select.hを使わないようにconfigureできないものか。
530 = :
>>529
mingwの位置付けが判っていたら当然そういう風に行動するだろ?
ってか guile をビルドの話なのか?
guile をビルドするときなら configure --disable-posix とかあった気がするが…
532 = :
じゃあきっとそのlibguileは --disable-posix で作られてるんだろ?
533 = :
>>532
guileの意義がわかんねーなら上から目線で語るなよwwww
534 = :
…と、>>533が最上位から申しております。
535 = :
Cygwinでgcovを使いたいのですが、
gccに-mno-cygwinのオプションを付けて実行すると以下のようなエラーが出ます。
test.gcda:Version mismatch - expected 304m got 304c
-mno-cygwinを付けてgcovを使うことはできないのでしょうか?
Cygwinのバージョンは1.5.25-7です。
537 = :
>>535
http://www.cygwin.com/ml/cygwin/2007-11/msg00180.html
539 = :
>>537
Cygwinで-mno-cygwinを使う代わりに本物のMinGWを使うことで解決できました。
ありがとうございました。
541 = :
ckのソースどっかに落ちとらんかのー
542 = :
どぞ http://www.ch-werner.de/ck/
543 = :
ん? ck違い!? とりあえずサンクスコ
544 = :
浮動小数点演算を行なうルーチンをコンソールアプリ(main関数)から呼んだときと
Win32 API で書いた GUI アプリから呼んだときとで計算結果が違うという問題に
悩まされています。どなたか解決策をご存じないでしょうか。
問題を再現する、できるだけ小さなプログラムを作りました。
http://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 = :
面倒だからソースは見ていないけど、どちらかはFPUで計算を行いどちらかはSSEで計算を行なっていると思われる。
コンパイルオプションで強制できるから、必要なら強制すればいい。
但し、doubleの精度を超えた領域の話なのでどちらも間違っているとはいえない。
546 = :
./test1
4.7474747474747475e-001
4.6969696969696967e-001
./test2
4.7474747474747475e-001
4.6969696969696967e-001
gcc version 4.1.2
ごめん、役に立てそうも無いw
とりあえずmap出力してdiff取ってみたらどうか
547 = :
アセンブリ出力を見るだけだろ。常考
みんなの評価 : ★
類似してるかもしれないスレッド
- Cygwin + MinGW + GCC 相談室 Part 8 (938) - [97%] - 2022/10/28 8:00
- Cygwin + MinGW + GCC 相談室 Part 7 (996) - [97%] - 2014/9/21 2:15
- Cygwin + MinGW + GCC 相談室 Part 6 (981) - [97%] - 2012/12/30 23:15
- Cygwin + MinGW + GCC 相談室 Part 5 (981) - [97%] - 2011/4/6 2:32
- Cygwin + MinGW + GCC 相談室 Part 4 (1001) - [97%] - 2010/3/23 18:31 ☆
- 【激遅】AppleGCC【絶望】 (111) - [1%] - 2010/1/15 10:31
トップメニューへ / →のくす牧場書庫について