[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 11/19 11:00 / Filesize : 247 KB / Number-of Response : 958
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Cygwin + MinGW + GCC 相談室 Part 4



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/

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を落とせ

546 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 00:30:20 ]
>>545
トンクス



547 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 22:45:45 ]
いま64bit windows環境がなくて試せてないんだけど、mingw-w64ってどう?

548 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 23:35:40 ]
>>507
メモリ不足でNULLが返るかというと微妙。
mallocは成功して、実際にメモリを使う時(読み書き)すると初めてメモリを割り当てて不足したらそこで止まるようなシステムもある。
Linuxなんかはそう。

549 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 23:47:17 ]
そんなのあるのか…manpageでバグ扱いされてるな

550 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 00:52:47 ]
>>548
ここはCygwinのスレであって、Linuxのスレではないし
落ちるのがmalloc内部と限定される場合には当てはまらない。

だいたい、「落ちる」と言っても
セグフォールトのような症状で落ちるのではなく
「有無を言わさずプロセスがkillされる」だけなのだから。

551 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 00:58:08 ]
それも、殺されるのは自プロセスとは限らない、
というより、自分以外である方が普通。

552 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 01:35:15 ]
制限なんて作らなかったら良かったのに

553 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 12:24:54 ]
Browse TDM's GCC/MinGW32 Builds Files on SourceForge.net
ttp://sourceforge.net/projects/tdm-gcc/files/
ここの
1.902.0
 tdm-mingw-1.902.0-f1.exe
 tdm-mingw-1.902.0-f2.exe
 tdm-mingw-1.902.0-webdl.exe
これら3リリースの違いを教えていただけますでしょうか?



554 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 15:39:34 ]
>>553
As a general rule, you should choose the default SJLJ packages,
unless you know you need faster exception handling and can guarantee
you'll never need to unwind through non-DW2-compiled stack frames
(such as a Windows callback). If you chose the DW2 packages,
consider removing the "-dw2" suffix from the program names.
See README-gcc-tdm.txt, included in the core package,
for further notes on this topic.

つまりSJLJ(f1)を優先的に使えと

Dwarf-2(f2)を使うのは、速い例外処理と、DW2でコンパイルされた
のではないスタックフレーム(Windowsのコールバックのような)を解放する
必要が無い事を保証できる

もしf2を使うなら、プログラム名から"-dw2"接尾辞を削除する事を
考慮しなさい

つまりコールバックを多用してまたより速い例外処理が必要ならf2を、
そうでなければまずf1を選べという事でしょう

webdlはオンデマンドインストールで、画面から何をダウンロードして
インストールしたりアンインストールするか決めれるというだけのもの
でも便利

最終的にはどうすればいいかというと上の注意に従いながらwebdlで
インストールすればいいという事になる

555 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 15:41:25 ]
あ、訳がおかしいな

×もしf2を使うなら、プログラム名から"-dw2"接尾辞を削除する事を考慮しなさい
○もしf2を使うなら、プログラム名から"-dw2"接尾辞を削除するかどうかよく考えなさい

556 名前:デフォルトの名無しさん mailto:sage [2009/09/13(日) 00:16:58 ]
ttp://pc12.2ch.net/test/read.cgi/tech/1251773567/
に居た者ですが、TDM-MinGWの問題のため、こちらに参りました。

  ttp://codepad.org/zASwhl4f
  このコード、codepadで実行させると上のリンクのように正常に動作しているようですが、
  私の環境g++ (TDM-1 mingw32) 4.4.0ですと
  0.1
  -9.25596e+061
  と表示されてしまいます。

という問題が生じておりまして、
  TDM-MinGW4.3.3 -> ×
  TDM-MinGW4.4.0 -> ×
  TDM-MinGW4.4.1 -> ○
  ということで、
  TDM-MinGW4.4.1で修正されたバグだったようです。
という一応の決着をみました。

しかし本当にバグであったかを確認したく、
皆様、
 「Windowsで」
 TDM-MinGW4.3.3 , TDM-MinGW4.4.0 , TDM-MinGW4.4.1
を入れている方がいらっしゃいましたら、
宜しければ是非
ttp://codepad.org/zASwhl4f
を試して頂けませんでしょうか?




557 名前:554 mailto:sage [2009/09/14(月) 07:03:12 ]
>>555
なるほど。
とても良く分かりました。
本当にありがとうございました。

558 名前:553 mailto:sage [2009/09/14(月) 07:03:54 ]
>>554-555
すみません間違えました。
私はしがない>>553でございます。
ありがとうございました。

559 名前:デフォルトの名無しさん mailto:sage [2009/09/14(月) 11:18:38 ]
>>550
mingwでも巨大なメモリをアロケートしたプログラムは途中まで処理が進んだ状態で落ちる(windowsのエラーダイオログが出て)がね。
ぬるぽチェックでは止まらんよ。


560 名前:デフォルトの名無しさん mailto:sage [2009/09/14(月) 16:04:59 ]
じゃあLinuxとは違うじゃねーか。
Linuxは何事も無かったように、どこかの知らないプロセスを落として
メモリを確保するんだから。

561 名前:デフォルトの名無しさん mailto:sage [2009/09/14(月) 16:08:28 ]
Cygwinの話じゃなくてMingwもかい。

Mingwだったら、HeapAllocをそのまま使えば
ちゃんとNULL返してくれるのに。
バカみたい。

562 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 00:45:37 ]
>>559
例えば、↓のようなコードでは全然落ちない(普通にNULLが返る)んだけど
再現するコードを例示してくれ。

まさかとは思うが、newを使っていて
bad_allocをcatchしてないから落ちるってオチじゃないよね。

563 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 00:47:20 ]
void test(unsigned nmegabytes, std::vector<void *>& saver) {
 unsigned alloced = 0;
 printf("[%u]MByte\n", nmegabytes);
 for (;;) {
  void *p = malloc(nmegabytes * 1024 * 1024);
  if (!p) {
   printf("malloc() returns NULL at allocated %uMB\n", alloced);
   break;
  }
  *(int *)p = 0; // アクセス違反で落ちる?
  alloced += nmegabytes;
  saver.push_back(p);
 }
 // clear
 for (std::vector<void *>::iterator it = saver.begin(), end = saver.end(); it != end; ++it) {
  free(*it);
 }
 saver.clear();
}
int main() {
 std::vector<void *> saver;
 saver.reserve(4 * 1024);

 test(1, saver);
 test(50, saver);
 test(500, saver);
}

564 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 01:11:12 ]
>>563
C++かとおもいきや、malloc使ってるのかよw
えっと、とりあえずそんなに領域確保出来たっけ。

ってことで、
  if (!p) {
   printf("malloc() returns NULL at allocated %uMB\n", alloced);
   break;
  }

if (!p) {
printf("malloc() returns NULL at allocated %uMB\n", alloced);
perror("error");
exit(EXIT_FAILURE);
break;
}
と書き換えてみれば、何が原因で落ちたかわかるよ。
あと、pが確保出来てないのに、そこでbreak;しちゃうと、そりゃその後でアクセス違反で落ちるよw



565 名前:デフォルトの名無しさん [2009/09/15(火) 01:14:22 ]
だから「落ちねー」ってのタコ。

「ちゃんとNULL返してる」っての。

566 名前:デフォルトの名無しさん [2009/09/15(火) 01:15:22 ]
さっさと「落ちるコード」出せやボケ



567 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 01:17:51 ]
>>565-566
同意だがそんなにカリカリすんなよ(´・ω・`)

568 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 01:17:57 ]
ごめん流れ読んでなくて、単なる質問だと思ったw


569 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 20:48:34 ]
ふつうにOllyDbgあたりのデバッガアタッチして追ったらダメなの?

570 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 22:49:36 ]
ttp://www.tdragon.net/recentgcc/

 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.
これが修正されるのはいつですか?


571 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 07:14:29 ]
>>570
知らねえ
嫌ならTDMじゃないMinGWを苦労して入れてそっち使ってろよ

572 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 11:37:37 ]
>>571
それもめんどくさい
まあ問題が出るようだったら古い版のTDM使うことにするけど。

573 名前:デフォルトの名無しさん [2009/09/26(土) 11:23:46 ]
64bit のmingw入れて、32bit用のアプリを
生成するにはどうすれば良いの?

574 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 11:46:53 ]
-m32?

575 名前:デフォルトの名無しさん [2009/09/26(土) 20:46:01 ]
だな

576 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 13:01:44 ]
MinGW と Msys を去年の10月ごろ入れて
gcc のバージョンが
gcc version 3.4.5 (mingw-vista special r3)
なんですが
netdb.h sys/socket.h netinet/in.h がインクルードできません
最新版にすればインクルード出来るでしょうか?
Cygwin にしないとダメなんでしょうか?



577 名前:576 mailto:sage [2009/10/02(金) 14:51:31 ]
何か3.4.5 だとSJISもうまくコンパイルできないようなんですが
3.4.2とかを入れないといけないのでしょうか?

578 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 15:06:46 ]
>>577
当然、-finput-charset=cp932とかやってるんだろうね。

579 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 15:14:14 ]
>>578
やっていません。
3.4.5 でも
そのオプションをつければいけるのでしょうか?
今やっているのは取りあえず通らない文字を削っているのです

取りあえず、SJIS はいいとして、インクルードファイルは、3.4.2 とかにしないといけないのでしょうか?

580 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 15:21:26 ]
全部試してみればいいじゃないか
無料なんだから、めんどくさがってないで自分で解決してみろ

581 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 15:35:55 ]
>>576
MinGWならwindows APIのソケットを使って下さい。

582 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 17:37:59 ]
4.3.2 にして、色々試していたらコンパイルもリンクも出来ました
皆さん、どうもありがとうございました。

583 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 20:25:46 ]
MSYSにVIMインストールするにはどうしたらいいんですか?

584 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 20:36:11 ]
手順
1. vim をインストールする


585 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 20:40:14 ]
>>583
vimのソースをダウンロードして解答したら中に
「INSTALL」か「README」っていうファイルがあるはずだからそれを読んでください。
大概、.configure; make; make install とかすることになりそうだけど。

586 名前:583 mailto:sage [2009/10/04(日) 21:20:04 ]
MinGW+MSYS環境なのですが,yumみたいなのはついていないのでしょうか?



587 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 21:27:13 ]
よくよく確認してみると、vimってMSYSにデフォルトで入ってるみたいなんだが。

588 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 21:31:53 ]
そういう何もかも込み込みの環境を提供しようとするものではない。
基本的には configure と make が動くところまでって感じ。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<247KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef