[表示 : 全て 最新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/

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






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

前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