のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,853人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    私的良スレ書庫

    不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
    ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

    元スレCygwin + MinGW + GCC 相談室 Part 3

    gcc スレッド一覧へ / gcc とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - 932 + - cannotfind + - cp932 + - FreeHDL + - heap + - known + - log4cxx + - WinMain@16 + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    501 : デフォルトの名無 - 2008/01/26(土) 19:20:24 (+4,-30,-114)
    >>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 (+120,-30,-272)
    質問です。非常に初歩的ですみません。

    ジョークコマンド 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 : デフォルトの名無 - 2008/01/30(水) 23:04:14 (+5,-29,-8)
    >>502
    gcc の -I オプションで curses.h があるディレクトリを指定
    504 : 502 - 2008/01/30(水) 23:57:09 (+3,-30,-129)
    >>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 : デフォルトの名無 - 2008/01/31(木) 00:01:20 (+57,+29,-5)
    1を聞いて10を知れ、とは言わないがちょっとな・・・
    506 : 502 - 2008/01/31(木) 00:46:02 (+3,-30,-78)
    ごめんなさい、図々しいお願いですね。

    gcc の man を見ているのですが、ライブラリの検索パスを追加するオプショ
    ンが見つかりません。
    また、C:\Program Files\gnuwin32 の下に pdcurses に相当するライブラリが
    あるのかと思ったのですが、libpdcurses.a というファイルが見つかりません。
    行き詰ってしまいました。
    507 : デフォルトの名無 - 2008/01/31(木) 00:49:24 (-11,-29,-2)
    -L でしょ?
    508 : 502 - 2008/01/31(木) 01:08:26 (+33,-30,-216)
    うわあ、これは恥ずかしい。申し訳ありません。
    日本語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 : デフォルトの名無 - 2008/01/31(木) 01:48:36 (+55,+23,-12)
    >>508
    > たぶん、正しいヘッダをインクルードすればいいと思うのですが。

    そう思うんだったら、includeディレクトリの中でsleep()の宣言を探す
    べきでしょ。たぶん無いけど。

    510 : 502 - 2008/01/31(木) 02:01:22 (+3,-30,-106)
    おっしゃるとおりです。見つかりませんでした。

    /MinGw/include には何もなく、

    /Program Files/gnuwin32/include には
    glibc/unistd.h に sleep() がありましたが、includeすると大量のエラー。
    winx/timex.h に nanosleep() がありましたが、
    undefined reference to `nanosleep' のエラーが出ます。

    /cygwin/include でも見つからなかったので、どうも方針がまずいようです。
    Cygwin 上だと何もせずにコンパイル、実行できましたので。

    今日はいったん中止します。
    511 : デフォルトの名無 - 2008/01/31(木) 08:33:38 (+3,-29,-25)
    このまま続けると嫌われるよ。
    おそらく、初心者板の方が適している質問と思われ。

    # -Iや-Lオプションなんて、cc時代から定番のオプションだし。
    # CygwinやMinGWの問題か切り分けられて無いし。
    512 : 502 - 2008/01/31(木) 13:11:55 (+19,-30,-280)
    ごめんなさい、では最後に一点だけ。

    /* 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 : デフォルトの名無 - 2008/01/31(木) 13:17:19 (+26,-4,-8)
    >>512
    そのpdcursesにスタティックリンク用のライブラリが添付されてない限
    り、キミには無理。
    514 : 502 - 2008/01/31(木) 13:22:08 (-1,-29,-21)
    ありがとうございました。dllは諦めます。
    あとはusleep(20000)ですが、これはどこか初心者スレを探して質問します。
    515 : 502 - 2008/01/31(木) 15:17:52 (+3,-29,-25)
    先ほどの者ですが、解決しました。

    #include <windows.h>
    ...
    Sleep(20);

    Windowsプログラミングに詳しい知人にアドバイスされ、このように修正したと
    ころ、見事に動くようになりました。

    どうもお騒がせしてすみませんでした。ありがとうございました。
    516 : デフォルトの名無 - 2008/01/31(木) 15:59:00 (+55,+29,-26)
    最初からそいつに聞け糞が

    そいつはそいつで、掲示板で聞けようぜえ
    と思ってるだろうがな
    517 : デフォルトの名無 - 2008/01/31(木) 16:23:57 (+57,+29,-9)
    「mingw sleep」でググるだけで、ヒントがたくさん出てくるんだけどなあ。
    518 : 502 - 2008/01/31(木) 18:53:51 (+57,+29,-21)
    ごめんなさい、訳があって急ぎだったので、無神経な質問をしてしまいました。
    ご迷惑をおかけしました。
    今度Java質問スレで、超初心者にていねいに答えますので、それで埋め合わせ
    にさせてください。
    519 : デフォルトの名無 - 2008/01/31(木) 20:08:57 (+52,+29,-5)
    人に教えてる暇があったら勉強しろ
    520 : デフォルトの名無 - 2008/02/01(金) 09:18:44 (+74,+29,+0)
    以上 >502 の日記からお伝えしました
    521 : デフォルトの名無 - 2008/02/02(土) 07:20:34 (+13,-30,-109)
    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 - 2008/02/02(土) 08:38:29 (-1,-29,-2)
    すみません自己解決しました。

    System32にCygwin1.dllがあったのが悪かったようです。
    523 : デフォルトの名無 - 2008/02/05(火) 19:57:57 (+3,-30,-144)
    guileのinfoにある例(インタプリタを作るだけ)をmingwでコンパイルしたら
    sys/select.h
    ieeefp.h
    が無いと言われてしまいます。
    確かに/includeにも/mingw/includeにもそんなファイルはありゃしませんが。
    mingwじゃlibguileは使えないのでしょうか?

    バージョンは
    gcc: 3.4.2
    guile: 1.8.2
    です。
    524 : デフォルトの名無 - 2008/02/05(火) 20:08:18 (+10,-30,-69)
     _____ ___
    <ー、\\ヾiγ/rニミ
     \ヾヘヽヽリ川///γ
      >川/ ̄"""" ̄「リ
      (ヘir-=o=ッィ=o=j
     _ハ| `ー/ ii、i
    <\ ヽヽ `ー′/
     \ヽ \  ̄ ̄/∩へ  Cygwinじゃ駄目なのか?
    __ii   ̄/二ノ レ<    guileのmakeに必要な環境やライブラリはあるのか?
    ヘヘヘ\ヽニ>-イ|( Y/)
    ノ// / ヽ_ノ|ヽハ/)
    ノ ̄  `ー | |ヒ/
    525 : デフォルトの名無 - 2008/02/05(火) 20:13:56 (+14,-28,-17)
    >>524
    試しにcygwinでやってみたら、gmpを入れてないのでハネられます。
    まあ、gmp入れてcygwinでやればいいだけなんだろうけど。
    主力環境がmingwなのでmingwでやりたいなと。
    526 : デフォルトの名無 - 2008/02/05(火) 20:20:56 (+0,-29,-15)
    敗因は2つだ
    - >>525 は sys/select.h が何なのかわかってない
    - >>525 は mingw がどんな位置づけにあるものかもわかってない
    527 : デフォルトの名無 - 2008/02/05(火) 20:31:43 (-1,-29,-13)
    guileを使うのにPOSIX環境である必然性があるのかな
    528 : デフォルトの名無 - 2008/02/05(火) 21:10:01 (+46,+28,-3)
    ないと思うが…
    529 : デフォルトの名無 - 2008/02/05(火) 23:46:04 (+4,-29,-21)
    では、mingwの位置づけ云々は関係ないような。
    select.hを使わないようにconfigureできないものか。
    530 : デフォルトの名無 - 2008/02/06(水) 00:23:46 (+7,-29,-74)
    >>529
    mingwの位置付けが判っていたら当然そういう風に行動するだろ?
    ってか guile をビルドの話なのか?
    guile をビルドするときなら configure --disable-posix とかあった気がするが…
    531 : デフォルトの名無 - 2008/02/06(水) 01:24:34 (+0,-30,-64)
    >>530
    sourceforgeのmingw用にビルドされたguileをインスコしてlibguileまで一緒に入っているのにselectがないとかもうね、なんなんだと。
    532 : デフォルトの名無 - 2008/02/06(水) 05:34:13 (+31,-29,-16)
    じゃあきっとそのlibguileは --disable-posix で作られてるんだろ?
    533 : デフォルトの名無 - 2008/02/06(水) 12:51:39 (+94,+29,-30)
    >>532
    guileの意義がわかんねーなら上から目線で語るなよwwww
    534 : デフォルトの名無 - 2008/02/09(土) 17:33:53 (+68,+28,-17)
    …と、>>533が最上位から申しております。
    535 : デフォルトの名無 - 2008/02/09(土) 18:04:39 (+31,-30,-56)
    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 (+0,+0,+0)
    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 : デフォルトの名無 - 2008/02/10(日) 05:47:34 (+56,+30,+0)
    538 : デフォルトの名無 - 2008/02/10(日) 08:22:53 (+0,-27,-8)
    >>536
    ライブラリのサーチパスは指定しているけど、ライブラリそのものを指定していないじゃん。
    539 : デフォルトの名無 - 2008/02/10(日) 09:52:41 (+5,-29,-8)
    >>537
    Cygwinで-mno-cygwinを使う代わりに本物のMinGWを使うことで解決できました。
    ありがとうございました。
    540 : デフォルトの名無 - 2008/02/10(日) 13:45:20 (+0,+16,+0)
    >>538
    ありがとうございました。無事コンパイルすることができ、実行もできました。
    541 : デフォルトの名無 - 2008/02/20(水) 01:17:56 (+77,+29,-15)
    ckのソースどっかに落ちとらんかのー
    542 : デフォルトの名無 - 2008/02/22(金) 00:44:21 (+42,+24,-1)
    どぞ http://www.ch-werner.de/ck/
    543 : デフォルトの名無 - 2008/02/22(金) 10:17:09 (+45,+17,-1)
    ん? ck違い!? とりあえずサンクスコ
    544 : デフォルトの名無 - 2008/02/23(土) 09:23:36 (+27,-30,+0)
    浮動小数点演算を行なうルーチンをコンソールアプリ(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 : デフォルトの名無 - 2008/02/23(土) 09:53:13 (+34,+1,-37)
    面倒だからソースは見ていないけど、どちらかはFPUで計算を行いどちらかはSSEで計算を行なっていると思われる。
    コンパイルオプションで強制できるから、必要なら強制すればいい。
    但し、doubleの精度を超えた領域の話なのでどちらも間違っているとはいえない。
    546 : デフォルトの名無 - 2008/02/23(土) 09:55:30 (+3,-30,-61)
    ./test1
    4.7474747474747475e-001
    4.6969696969696967e-001
    ./test2
    4.7474747474747475e-001
    4.6969696969696967e-001

    gcc version 4.1.2

    ごめん、役に立てそうも無いw
    とりあえずmap出力してdiff取ってみたらどうか
    547 : デフォルトの名無 - 2008/02/23(土) 10:01:53 (+52,+29,-1)
    アセンブリ出力を見るだけだろ。常考
    548 : デフォルトの名無 - 2008/02/23(土) 10:17:20 (+3,-30,-156)
    同じになっちまった。
    .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 : デフォルトの名無 - 2008/02/23(土) 10:20:48 (+8,-29,-24)
    そういえば、全然関係ない話だけど
    MinGWのprintfで、%hhXとかうまく機能しない原因知ってる人いない?
    550 : デフォルトの名無 - 2008/02/23(土) 11:00:51 (-1,-29,-5)
    msのcランタイムがc99対応じゃないから
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / gcc スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - 932 + - cannotfind + - cp932 + - FreeHDL + - heap + - known + - log4cxx + - WinMain@16 + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について