1 名前:デフォルトの名無しさん [2008/09/13(土) 00:38:02 ] Windows上で動作するフリーの開発環境 CygwinとMinGWに関する相談スレッドです。 過去スレ: cygwin + mingwn + gcc 相談室 Part3 pc11.2ch.net/test/read.cgi/tech/1177944767/ 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について part8 pc11.2ch.net/test/read.cgi/tech/1192201659/ 【激遅】AppleGCC【絶望】 pc11.2ch.net/test/read.cgi/tech/1173267844/
445 名前:デフォルトの名無しさん [2009/07/10(金) 12:55:38 ] >>445
446 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 13:18:32 ] >>443 配列の操作はポインタ演算なんだから固定長以外無理だろ。 可変長の操作をポインタ風にするにはクラスで隠蔽するしかねーじゃん。 C/C++に対して、何を寝とぼけたこと言ってるんだ。
447 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 13:20:26 ] それは流石に的外れw
448 名前:デフォルトの名無しさん [2009/07/10(金) 13:55:30 ] >>443 JISコードでも使っとけ
449 名前:デフォルトの名無しさん [2009/07/10(金) 13:57:43 ] >>443 >>446 の云う通りだ 「文字」クラスを作って 配列はそのクラスのインスタンスへのポインタを並べたものにする どうだ最強だろ
450 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 14:21:05 ] 激しくスレチかも知れませんが、もしそうだとしたら誘導してください。 smakeってどうやってビルドすればいいのでしょう? Cygwinには入っているらしいのですが当方MinGWを使っているので・・・ 当方の環境: WinXP SP2 gcc v3.4.5
451 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 20:13:58 ] >>450 何がわからんのか書いてくれ。 make 一発でビルドできて躓くポイントなんぞ無いぞ。 と、いうか Readme 読め。
452 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 22:51:55 ] >>451 そのReadmeがついてないという…
453 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 07:37:12 ] >>452 smakeだったら README.compileってファイルがあると思うが 他にもlinux系ツールだと INSTALLってファイルにビルド方法が 書かれていることが多い
454 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 12:12:14 ] >>453 thx!
455 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 20:06:33 ] WinXP SP2 gcc v3.4.5
456 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 22:16:12 ] MinGWのインストーラーって無くなりました? 幾つかの参考サイトはインストーラーが前提になってて インストールしたいのですけど配布サイトに無くてお手上げ状態です。
457 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 22:25:06 ] >>456 俺は公式のMinGWが面倒なのでTDM-MinGW使ってる www.tdragon.net/recentgcc/ これならインストーラもある
458 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 23:52:15 ] >>456 lzma で配布されてるデカいアーカイブがひとつあるだろ。 GCC 4.4.0 を使うのに必要なものはそれに全部入ってる。
459 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 03:49:58 ] 456では無いけど、そのlzmaファイル、今は無いみたいだ >The "/GCC Version 4/Current Release_ gcc-4.4.0/gcc-full-4.4.0-mingw32-bin-2.tar.lzma" file could not be found or is not available. >Please select another file. ・・・他のファイルも落とせないし、sf.netがリニューアルしてから調子悪いのか
460 名前:456 mailto:sage [2009/07/23(木) 10:40:20 ] 質問した本人です。 こんな早く返事が帰ってくるとは思っていませんでした。反応遅くて申し訳ないです。 とりあえず>>457 を使ってみようと思います。 お返事ありがとうございました。
461 名前:456 mailto:sage [2009/07/23(木) 10:45:02 ] >>457 を使おうと思ったら>>459 と同じ内容が出てきましたorz
462 名前:デフォルトの名無しさん [2009/07/23(木) 11:12:02 ] keihanna.dl.sourceforge.jp/mingw/40734/gcc-full-4.4.0-mingw32-bin-2.tar.lzma
463 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 11:15:45 ] うげ、やっちまった。直リンになっちまった。ごめんなさい>keihanna
464 名前:456 mailto:sage [2009/07/23(木) 12:19:17 ] 今配布サイトに繋げたらインストーラーが追加されてました。 昨日はなんで無かったんでしょうね…。 ともかく使ってみます。 ありがとうございました。
465 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 16:59:19 ] www.computerworld.jp/topics/ms/156530.html
466 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 00:43:46 ] なんか公式のダウンロードページここ最近いろいろ変更されてるね
467 名前:デフォルトの名無しさん [2009/07/27(月) 00:48:58 ] Cygwin+GCC4(非MinGW)で UTF-16BEのテキストファイルをmmapし、 それをwchar_t型の配列にキャストした場合 wprintf()で出力される文字は、UTF-16BEなのでしょうか? wchar_tやwprintf()で出力される文字コードは環境依存と聞いた事があるので Cygwinではどうなっているのかわからないのです。 ちなみに、試しに出力してみましたが、画面表示のロケーションをUTF-16BEにしてるにも関わらず文字化けします。 こちらの設定ミスなのか、仕様なのかがわからないので・・・
468 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 01:00:06 ] >>467 Cygwinのバージョンは? 1.7ならLANGをちゃんと設定しておけばいけるはず。 1.5ならwcharは壊れてるので事実上使用不可なんじゃなかったっけ。
469 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 09:01:50 ] Cygwinのwchar_tはUTF-16LEじゃないかい?
470 名前:デフォルトの名無しさん [2009/07/27(月) 11:09:59 ] swab関数でバイトオーダーを入れ替えちまえ
471 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 20:23:50 ] gcc-full-4.4.0-mingw32-bin-2.tar.lzmaをダウンロードして解凍しました。 で、以下のソースを msys上でコンパイルしたら、すごい量のエラーが吐かれました。なんか文字化けてるし、全然意味わかりません。 助けて下さい。 ---------------------------------------------- #include <iostream> using namespace std; int main() { cout << "Hello" << endl; return 0; } ---------------------------------------------- ---------------------------------------------- $ g++ hello.cpp c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/bits/postypes.h:42 、ォ、・includ e 、オ、・ソ・ユ・。・、・・, c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/iosfwd:42 、ォ、 , c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/ios:39 、ォ、, c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/ostream:40 、ォ 、, c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/iostream:40 、 ォ、, hello.cpp:1 、ォ、: c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/cwchar:47:19: error: wchar.h: No such file or directory (以下続く) ----------------------------------------------
472 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 20:33:23 ] >>471 win32api 関連とかは別のファイルになってる。 ちゃんと説明読め! sourceforge.net/project/shownotes.php?release_id=691876
473 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 20:46:43 ] >>472 すいません。読んでませんでした。 ちゃんと別のファイル落して、くわえたら動きました。 ありがとうございました。
474 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 20:48:35 ] あとエラーメッセージとかの日本語は euc になってる。 ターミナル側を euc に設定できるならそうしたらいいけど、 sjis 版のカタログファイルを用意してやったぞ。 www.42ch.net/UploaderSmall/source/1249645520.mo をダウンロードして /mingw/share/locale/ja/LC_MESSAGES/gcc.mo をおきかえろ。
475 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 20:56:29 ] >> 474 ぉお〜 !!ありがとうございます。
476 名前:デフォルトの名無しさん [2009/08/10(月) 22:26:06 ] cygwin でシェルスクリプトを実行しようとすると cannot execute binary file というエラーが出てしまいます。 どうしたらいいんでしょう?
477 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 22:48:18 ] シェルは何を使ってんの?
478 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 23:19:07 ] >>476 a)Unicode(UTF-16)で保存している b)BOM付きUTF-8(メモ帳のUTF-8で保存するとコレ)で保存している のどっちかじゃね? TeraPadあたりでUTF-8N保存してみたら?
479 名前:デフォルトの名無しさん [2009/08/11(火) 14:03:25 ] 387 名前:名無しさん@お腹いっぱい。[] 投稿日:2009/08/10(月) 08:03:10 シェルスクリプトを実行すると ./test.sh : cannnot execute binary file なるエラーが出てしまいます。 何が悪いんでしょう。 スクリプトは下なのですが #!/bin/bash cat data.txt
480 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 14:07:12 ] MinGWでgcc 4.4.0を入れたんだが、 gcc -vをすると文字化けするとこあるんだが、なんでだろ? helloworldで日本語入れて表示させても文字化けしないんだが。 C:\Users\Username>gcc -v Using built-in specs. Target: mingw32 ・ウ・・ユ・」・ー・ェ・ラ・キ・・: ../gcc-4.4.0/configure --enable-languages=c,ada,c++,fortran,java,objc,obj-c++ --d isable-sjlj-exceptions --enable-shared --enable-libgcj --enable-libgomp --with-dwarf2 --disable-win3 2-registry --enable-libstdcxx-debug --enable-version-specific-runtime-libs --prefix=/mingw --with-gm p=/mingw/src/gmp/root --with-mpfr=/mingw/src/mpfr/root --build=mingw32 ・ケ・・テ・ノ・・ヌ・: win32 gcc version 4.4.0 (GCC)
481 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 14:14:21 ] >>480 >>474
482 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 14:16:05 ] 上側の化けてるところは「コンフィグオプション」で、下側は「スレッドモデル」だな
483 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 14:20:11 ] >>480 ソースコード中に日本語を使うなら -finput-charset や -fexec-charset オプションでエンコーディング指定するのを忘れないように。
484 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 14:22:08 ] -finput-charset=cp932 -fexec-charset=cp932 これか
485 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 14:23:47 ] >>481-483 即レスthx! もっと勉強させてもらいます><
486 名前:480 mailto:sage [2009/08/11(火) 14:51:33 ] >>474 でDLしたファイルをgcc.moにリネームして置き換えたら、文字化け無くなった。 C:\Users\Username>gcc -v Using built-in specs. Target: mingw32 RtBOIvV: ../gcc-4.4.0/configure --enable-languages=c,ada,c++,fortran,java,objc,obj-c++ --disable-sjl j-exceptions --enable-shared --enable-libgcj --enable-libgomp --with-dwarf2 --disable-win32-registry --enable-libstdcxx-debug --enable-version-specific-runtime-libs --prefix=/mingw --with-gmp=/mingw/s rc/gmp/root --with-mpfr=/mingw/src/mpfr/root --build=mingw32 Xbhf: win32 gcc version 4.4.0 (GCC) >>482 が言ってくれたみたいに、 「RtBOIvV」のところって、gcc3.4.5のときだと「Configured with」って表示されてたような。 「Xbhf」のところは、gcc3.4.5のときだと「Thread model」って表示されてたような。 この文字列に意味あるのかな?
487 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 14:56:00 ] >>486 いやいや、それ化けてますから! ちゃんと適用されていればまさに >>482 の通り表示するはずなんだ。
488 名前:480 mailto:sage [2009/08/11(火) 17:11:32 ] >>487 レスthx! 今は、情報収集でググったりしてるところであります。 とりあえず現状は、 (1)コマンドプロンプトの文字コードはCP932。 (2)gcc -vで日本語と思われるところが文字化け。 (3)日本語を含む文章(ファイルの文字コードはSJIS)をprintfで表示させたら文字化けはしない。 (4)gcc3.4.5を入れたら、\shareにlocaleフォルダが無かった(多言語対応してないのかな?) もしかして、gcc4.4.0の導入方法がダメなのかな? 公式ページからMinGW5.1.4.exeをインストールしたら、gccは3.4.5になってた(とりあえず、C:\MinGWを作成)。 で、公式ページからgcc-full-4.4.0-mingw32-bin-2.tar.lzmaをダウンロードして、 解凍したできたフォルダ達を\MinGWで上書きした。 この方法がそもそもダメとか?
489 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 10:07:37 ] MinGW 5.1.4のg++で std::wstring がコンパイルは通るんだが,リンカーエラーになる。(IDEとしてCode::Blocks使用,ソースはBOMなし UTF-8で書いてる)。環境変数関係の設定はもちろんOKのはず。 #include <windows.h> #include <string> using namespace std; int main() { wstring wstr(L"はろー"); //ここと ::MessageBoxW(NULL, wstr.c_str(), L"タイトル", MB_OK); //ここをコメントアウトして // ::MessageBoxW(NULL, L"はろー", L"タイトル", MB_OK); //ここのコメントを外すとOK return 0; } このプログラムをビルドするとリンカーが, C:\Documents\Software\CodeBlocks\unitest\main.cpp|9|undefined reference to `std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::basic_string(wchar_t const*, std::allocator<wchar_t> const&)'| というエラーを吐く。wstringをやめてstringを使い,ソースをSJISにして::MessageBoxAで表示させると問題ない(L”なんたら”のLは外す)。 ヘッダーファイルをgrepで検索したら, #if defined (_GLIBCXX_USE_WCHAR_T) || defined (_GLIBCXX_USE_WSTRING) template<> struct char_traits<wchar_t>; typedef basic_string<wchar_t> wstring; #endif #endif と書いてあったので,念のため _GLIBCXX_USE_WCHAR_T と _GLIBCXX_USE_WSTRING を定義してみたけど やっぱりダメ(リンカーエラーだから関係なさそうだけど)。何かライブラリが足りないのかな?
490 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 14:53:22 ] > 念のため _GLIBCXX_USE_WCHAR_T と _GLIBCXX_USE_WSTRING を定義してみたけど それが定義された状態で libstdc++.a がビルドされてないとダメなんじゃないか?
491 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 00:29:28 ] >>490 > それが定義された状態で libstdc++.a がビルドされてないとダメなんじゃないか? レスサンクス。 それって、_GLIBCXX_USE_WCHAR_T と _GLIBCXX_USE_WSTRING を定義した上で libstdc++.a をビルドしろって意味? バイナリ拾ってきてインストールしたんで(ダウンロード してインストールする方式だったけど)、ソースからビルドするにはどうすればいい? 教えて君でスマン。
492 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 00:58:58 ] libstdc++.a は gcc のソースに一緒に入ってるんじゃないかなぁ。
493 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 01:25:36 ] >>491 gccをビルドするときのconfigureオプションじゃないかと調べずに言ってみる。
494 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 02:13:24 ] >>491 libstdc++.aは C:\MinGW\lib\gcc\mingw32\4.4.0にあるよ
495 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 02:42:21 ] >>494 バイナリがどこにあるなんてことじゃなくてビルド方法の話だろ。
496 名前:491 mailto:sage [2009/08/14(金) 07:10:01 ] >>495 > バイナリがどこにあるなんてことじゃなくてビルド方法の話だろ。 その通りです。既存の libstdc++.a をリンクしてのテストはもちろんやってて、 それでうまく行かないのです。 うーん。バイナリダウンロードしてきて、そのままインストーラー任せでやったから、 こういうとき困るね。Code::Blocks使うので、MSYSすらインストールしてない。 もう少し調べてみます。
497 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 23:08:29 ] こんな記事があった。 www.mingw.org/category/wiki/libstdc
498 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 23:15:00 ] もう stlport 使えよ
499 名前:491 mailto:sage [2009/08/15(土) 00:10:44 ] >>497 あちゃぁ、がっくし... 比較的最近の記事だし、そういうことなのかぁ。 >>498 そういうことですかね。検討します。 皆さんアリガト。
500 名前:デフォルトの名無しさん [2009/08/28(金) 21:38:57 ] cygwinでshlwapi(SHell Light Weight API)使うにはどうすんの? ソースに#include <shlwapi.h>書いて ldに-lshlwapi食わせてもなぜか失敗する
501 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 22:52:03 ] どう失敗するのか書けよ。 ライブラリがないのか? 実行時エラーか? エラーメッセージは?
502 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 22:53:54 ] gccだとVC/C++用のライブラリは使えなかったりするから、 shlwapiのライブラリをgccでコンパイルする必要があるのかもね。
503 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 23:07:54 ] 普通にインストールしてればインポートライブラリは入ってるよ。
504 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 20:15:03 ] もしかして、Cygwinのgccで確保出来るメモリ量って結構少ないですか? 膨大なソースで多分1日仕事になるであろうソースがあるんですが、 _cygtls::handle_exceptions: Exception: STATUS_ACCESS_VIOLATION ってエラーが出てて、どうもmallocかけてる所が怪しいんです。 ちなみに、SolarisとFreeBSD(両方64bit版)では動いてます。 Windowsは、XP x64だけど、多分Cygwinは32bitのはず。 でも、32bitの領域食いつぶしてるとも思えないしなぁ・・・
505 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 22:09:18 ] Ubuntu 9.04 で g++ 4.3.3 を使っているのですが、メモリ管理で質問があります。 std::list に例えば int 型のデータを例えば1000万個くらい突っ込み、topでメモリ使用量を確認すると、 150MBくらい使用しています。 その後、データが不要になったあとで clear() メソッドで中身を消去し、利用した関数を終了させて list を完全に削除した後でも、top で確認するとメモリが開放されずに残ってしまいます。 このメモリが開放されるのは、アプリケーションが終了されるときのみです。 この理由を知りたいのですが、ご存知の方は教えていただけないでしょうか? 試行錯誤してるうちに、std::list 以外でも、例えば new int[10000000] した後にデータを突っ込んだメモリは delete[] で消えますが、 for(int i=0 ; i<10000000 ; i++){ ... = new double; } してデータを突っ込んだメモリはすべて delete しても やはりメモリが残ってしまうことに気づきました。これも関係ありそうな気がします。
506 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 23:18:24 ] 逆アセンブルのリスト取ってsbrk()の呼び出してる箇所を見てみたら? malloc()はsbrk()を大抵呼び出すがfree()は単に未使用ブロックとして マークし直すだけの事が多いのでフリーリストのフラグメントが起きると うまく再利用されない事がある
507 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 23:22:11 ] >>505 あなたにメモリ管理についての知識が無いだけ。 例えばmallocの実装がどうなっているか、一度調べてみると良い。 >>504 実装にバグが無ければ メモリが足りない時は、mallocはNULLを返す。 malloc呼び出しの内部で落ちるのは、 アプリケーションがmallocの管理領域を壊している可能性が極めて高い。 例えば、1byteはみだして書き込んでいる場合、 64bitだとアラインメントの都合ではみだしていることが表面化しない場合がある。
508 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 23:33:39 ] >>505 単純にそれだけするテストをやってみたってこと? 一般に new (malloc) で確保したメモリを delete (free) した場合、 それらの領域は次に new したときに再利用される。 一旦確保したメモリはアプリケーション側で掴んでいるので、 そのアプリケーションが終了するまでは OS 側にしてみれば使用中に視える。 BSD 系のどれだったかでは一旦 OS に返すような実装のもあったような気がする。
509 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 01:05:22 ] >>505 大きなメモリブロックはOSから直接もらってOSへ直接返し、 小さなメモリブロックは独自に管理するのでOSへ返さず掴んだまま、 という実装は十分ありうるので、一応説明は付く
510 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 01:27:39 ] Cygwinって一応内部ではWin32呼んでるんだよね こういうの組んでみたけど結構こまめにOSに返してるよ #include <iostream> #include <windows.h> const int l = 10000000; int main() { double** a; MEMORYSTATUS ms; a = new double*[l]; for (int i = 0 ; i < l; i++) a[i] = new double; GlobalMemoryStatus(&ms); std::cout << ms.dwAvailPhys << std::endl; for (int i = 0 ; i < l; i++) delete a[i]; GlobalMemoryStatus(&ms); std::cout << ms.dwAvailPhys << std::endl; delete[] a; GlobalMemoryStatus(&ms); std::cout << ms.dwAvailPhys << std::endl; }
511 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 01:59:50 ] 「OSからの取得」をどうやっているのか、にも依存するよ。 例えばHeapAllocで獲得しているのだとしたら、 それは事実上mallocの実装そのものだから その内部で(システムコールを呼んで)カーネルに返しているかどうかは HeapAllocの実装次第。 >>506 の通りにsbrk()経由とするなら、その中で何が呼ばれてるかだね。
512 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 11:45:11 ] OS によってメモリ管理に関する方針はかなり違うけど、 Linux の場合は「なるべくめいっぱい活用する」方針だったと思う。 普通に使ってたら空いてるメモリはほとんどなくなるはず。
513 名前:自己レス [2009/08/30(日) 21:40:30 ] >>501-503 ありがとう どうやってもldが「undefined reference to ○○」言ってくるんですよ >>500 こうなったらもうインポートライブラリに頼らないで直接呼んじゃる!!! という方針で書いてみた(といってもほとんどwww.atmark.gr.jp/~s2000/r/rtl/shlwapi.html )のが↓
514 名前:デフォルトの名無しさん [2009/08/30(日) 21:41:37 ] #include <windows.h> #include <stdio.h> typedef int (*TFUNC)(LPCTSTR,LPTSTR,UINT); int main(int argc, char *argv[]) { char str[100]; int ret; HINSTANCE hInstDLL; TFUNC DllFunction;
515 名前:デフォルトの名無しさん [2009/08/30(日) 21:42:37 ] hInstDLL = LoadLibrary( "SHLWAPI.DLL" ); if( hInstDLL == NULL ){ printf( "hInstDLL == NULL" ); return -1; }else{} DllFunction = (TFUNC)GetProcAddress( hInstDLL,"PathSearchAndQualifyA" ); printf( "DllFunction : %d\n", (int)DllFunction ); ret = DllFunction(".",str,100); printf( "ret=%d,str=%s\n", ret , str); if(!FreeLibrary(hInstDLL)){ abort(); }else{} return 0; }
516 名前:デフォルトの名無しさん [2009/08/30(日) 21:54:41 ] 主な参考こっちだった(そこも参考にしたんだけど) www.pushaa.jp/%7Ehizuki/soft/wiki.cgi?cygwin%A4%C7Windows%A5%A2%A5%D7%A5%EA%A4%F2%BA%EE%A4%EB%A4%BF%A4%E1%A4%CE%A5%E1%A5%E2
517 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 22:25:58 ] >>513 gcc は実はインポートライブラリ無しでも dll とリンクできる。 -lshlwapi の変わりに /cygdrive/c/WINDOWS/system32/shlwapi.dll としてみれ。
518 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 22:27:10 ] gcc version 3.4.5 (mingw-vista special r3) だと>>500 の方法で何の問題もないね。
519 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 16:29:51 ] >>378 , 379 TDM版MinGW使ってみた。なかなか良くてCode::Blocksとの相性もバッチリなんだが, STLがやたら遅い(gccの問題だと思う)ので,STLPort5.2.1をビルドしようとしたら, うまく行かない。 一応ドキュメントも読んだんだが,MSYS上からmake gcc.makってやっても「何もすることが ない」って言われてビルドできない。 TDM版MinGWにはmake.exeはなくてmingw32-make.exeしかないけど,これは使っちゃいけないと 書いてあるので,MSYSにあるmake.exeでやってみたんだが... やり方教えてもらえると嬉しい。
520 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 19:21:10 ] >>519 make -f gcc.mak じゃね?
521 名前:519 mailto:sage [2009/09/01(火) 20:32:50 ] >>520 > make -f gcc.mak じゃね? そうそう、まずそれだった。普段IDEばかり使ってるんでmakeコマンドの使い方忘れてた。 で、まずは落ち着いてやってみようと思って、MinGWを通常の5.1.4に戻して、 >>331 を参考にSTLport5.1.7をビルドしてみた。 gcc.makというファイルは二箇所にあるけど、\build\libの下のヤツを使って、 make -f gcc.mak depend make -f gcc.mak install でビルド成功。ちなみに>>331 の、 > # if (__W32API_MAJOR_VERSION > 3) || ((__W32API_MAJOR_VERSION = 3) && (__W32API_MINOR_VERSION >= 12)) の = 3 のところは、== 3 が正解。で、ビルドは出来たんだけど、C++版Hello World!プログラム(iostream使うやつ) で試してみたら、コンパイル時に「#includeのネストが深すぎる」ってエラーがでた。 今仕事場にいないので詳細はわからない。続きはまたあしたかな...
522 名前:519 mailto:sage [2009/09/02(水) 18:28:05 ] MinGW5.1.4+STLPort5.1.7でテストをしてて,STLPortのビルドは出来たけど(Thanks to >>331 ), 使うとうまく行かない。 以下のHello world!! C++版をコンパイルしてみた。 #include <iostream> using namespace std; int main() { cout << "Hello world!" << endl; return 0; } 環境変数は入念にチェックして,MinGW標準のC++用ヘッダがインクルードされずに,stlportのヘッダが 読み込まれるようにしたんだが,コンパイルすると_cstddef.hの28行目の # include _STLP_NATIVE_CPP_C_HEADER(cstddef) のところで, C:\MinGW\include\stlport\stl\_cstddef.h|28|../3.4.5/cstddef: No such file or directory と言うエラーが出て,後はエラーの嵐。grepでいろいろ調べた結果,MinGWの場合 _STLP_NATIVE_CPP_C_HEADERの定義がうまく出来てないらしいことまではわかったんだが, どうすればいいんだろ。教えてエライ人。
523 名前:519 mailto:sage [2009/09/03(木) 18:00:08 ] 何とか自己解決。 ■ビルドはMSYS付属のmakeじゃなくて,WindowsのコマンドプロンプトからMinGWの mingw32-makeでやる(ドキュメントをよく読んでたら書いてあった)。但し,MSYS使わ ない場合はconfigure.bat -c gcc しろって書いてあるけど,これはウソ。 configureしてからメイクすると速攻エラーが出る。 mingw32-make -f gcc.mak depend mingw32-make -f gcc.mak install だけでOK。 ■unitテストはロケール関係で少しエラーが出た。ehテストはso_stlgだけ, EH TEST FAILURE ! [deque] :testing range insertion at random position (weak) ERROR : 37 outstanding allocations. となったが,so_gとsoはパス。ちなみにこのso_stlg, so_g, soというフォルダに3つ 同名のテストプログラムが出来るけど,違いは何なの?(unitテストsoとso_stlgの 2つのフォルダ内にexeができる)。 ■STLPortのヘッダやライブラリを置いた場所や元のMinGWのフォルダ構成にあわせて, stlport/stl/config/host.h を丁寧に書き換えてやる必要がある。 まぁ,いろんな環境に対応しなければならないので作る側の苦労はこんなもんじゃないと 思うが,ドキュメントはもう少し整備してまとめて欲しいなぁ...
524 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 09:41:40 ] TDM-MinGW4.4.1出てるな
525 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 12:01:32 ] >>524 ・・・あの、4.4.0がインストールしてある場合、 アップデートするには Create : Create a new TDM/MinGW installation Manage : Manage an existing TDM/MinGW installation Remove : Remove a TDM/MinGW installation のうちどれを選べば最も望ましいでしょうか?
526 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 12:21:43 ] >>525 知らんけどRemoveしてからインスコすればいいんじゃね?
527 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 12:23:18 ] >>525 俺はそういうメニューが出るとは知らなかったので プログラムの追加と削除から消してCreateした でもRemoveしてCreateしてもいいかもな
528 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 12:59:56 ] >>524
529 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 13:01:55 ] >>524 これ使うと,サイトの上の方にピンクの囲みで書いてあるとおり,実行のものすごく遅い プログラムが出来上がってしまう。 それでcoreとg++はサイトの下の方にある4.3.3を使ったら解決したよ。
530 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 14:29:16 ] Cygwin1.7でmpich2がmakeできんな。 clockとかシステムコールがないとか・・・ 素直にWIndowsバイナリ入れるかな・・・
531 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 14:57:20 ] WARNING: The 4.4.1-tdm-1 release is known to have a bug which causes drastically increased CPU usage in programs compiled with it. You are urged to use a previous release until this bug is fixed. excite&俺訳↓ 警告: 4.4.1-tdm-1リリースにはそれでコンパイルされたプログラムがCPUパワーをものすごく使うようになってしまうバグがあるのが知られています。このバグが修正されるまであなたが前のリリースを使用することを推奨します。 マジかよ!おじさん、気付かず更新しちまったぜ
532 名前:525 mailto:sage [2009/09/08(火) 15:03:06 ] みなさんありがとうございます。 どうやら CreateとManageの違いは、 Manageの場合はインストール先のパスなどが引き継がれて便利ということ だけっぽいです(完全に私の勘ですが)。 ・・・ですが、インストールしてみたところに>>529 さん、>>531 さんのレスをみて 即刻以前のインストーラを使って元に戻しました。
533 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 15:08:15 ] >>531 のレスを見て疑問なのですが、 これはgcc4.4.1のバグでしょうか? それとも 4.4.1-tdm-1 release独自のバグなのでしょうか? ご教示いただけませんでしょうか? よろしくお願い申し上げます。
534 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 15:42:48 ] > gcc4.4.1 Fortran, C, and C++ for Windows www.equation.com/servlet/equation.cmd?call=fortran ↑ こっちのは別に問題なさそうだけど。
535 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 15:44:01 ] >>534 となるとTDMのバグの可能性が高そうですね。 ありがとうございます。
536 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 21:53:01 ] どうせいずれ直るでしょ 俺は速度はそんなに気にしていない(コンパイルが通って動けばいい)派 なので気にしていない
537 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 21:56:49 ] TDMが止めた方がいいっていってるんだから 俺は止めとこう。 ・・・ってまあホント好き好きにすりゃ良い問題だよな。
538 名前:529 mailto:sage [2009/09/08(火) 22:27:35 ] >>536 > 俺は速度はそんなに気にしていない(コンパイルが通って動けばいい)派 > なので気にしていない それがさぁ、条件によっては実用にならない位遅くなるんだよ。 100行位のUNIDCODEのファイルを読み込ませて処理するソフトでテストしたら(STL使用)、 VC++やBCBでコンパイルしたものは数秒で終わるのに、TDM-MinGW4.4.1だと 10分位かかった。 で、>>529 に書いたように、coreとg++だけ4.3.3をダウンロードして上書き解凍してコンパイルし なおしたら、ちゃんと数秒で終わるようになった。
539 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 22:35:55 ] >>538 そんなにひどいのか じゃあ4.3.3に戻すか 簡単に戻せるしね SourceForgeからDLできるのであっという間だし
540 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 22:53:26 ] mingwはTDMが標準なのかな?
541 名前:532 mailto:sage [2009/09/08(火) 22:56:32 ] >>538 g++ (TDM-1 mingw32) 4.4.0に戻したのですが、 これもバグを抱えていますか? 4.3.3レベルまで戻す必要はありますでしょうか?
542 名前:529 mailto:sage [2009/09/08(火) 23:00:39 ] >>541 ごめん、4.4.0は持ってないし試してないのでわからない。 けど、サイトにそうは書いてないから大丈夫なんじゃないのかな?
543 名前:532 mailto:sage [2009/09/08(火) 23:44:02 ] >>542 ありがとうございます。 過去のサイト(Web魚拓みたいなもの)をあさって見たのですが 4.4.0リリース時点までは戻れなくて。。。
544 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 22:25:47 ] TDMってbashが入ってないけどconfigureはどうればいいの?
545 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 23:37:14 ] TDMに限らずMinGWにはbashは入っていない msysを落とせ