- MFC相談室 mfc22d.dll
599 :デフォルトの名無しさん[sage]:2014/09/02(火) 11:03:19.57 ID:TmMSlGm8 - >>598
それは状態変数のある文字コードと呼ばれていて、SJISや UTF8よりはプログラミングしにくい事が知られている。以下は理由の 一部: ・文字列を別の場所にコピーするような場合、状態まで含めてコピーする 必要がある。 ・文字列の内容を正しく示すためには、ポインタだけでは足りず、状態も 必要となる。 一方、SJISや、UTF8は、読み込みと書き込みだけを関数に任してしまえば プログラミングは楽。uint32 の変数に読み込んだ後の文字を入れてしまい、 それを処理すればよいだけ。それでいてメモリ効率が良い。
|
- 【GUI】wxWidgets(旧wxWindows) その5【サイザー】
719 :デフォルトの名無しさん[sage]:2014/09/02(火) 13:46:25.35 ID:TmMSlGm8 - configure を試してみたら、configureのヘルプ通りには行かなかった:
・以下、xxx = wxWidgets-2.8.12 とする。/xxx/ に configure スクリプトがある。 ・configureを使用するために、単なるcmd.exeではなくcygwin環境が必要であった。 ・cygwinを起動する際、cygwin に入ってからの PATH が、 (MinGWのbin) : /usr/local/bin/ : /usr/bin/ : (Winからのbin) の順になるようにした。 ・カレントを /xxx/ にして configure した。configure の引数には少なくとも ・--build=i686-pc-mingw32 --host=i686-pc-mingw32 --target=i686-pc-mingw32 を指定し、例外, rtti, regex, zlib, jpeg, png, tiff は無効にするオプション を設定した。他にも無効にしたものも多い。大量に及ぶので スクリプトに記述した。 ・Makefileが普段の /xxx/build/msw/ ではなく、/xxx/ に作られた。 ・/xxx/samplesのサブディレクトリにあるMakefileが書き換えられた。 ・setup.h が、 /xxx/lib/wx/include/msw-ansi-releasw-static-2.8/wx /xxx/lib/wx/include/msw-ansi-releasw-2.8/wx の二箇所に作成された。元々各所にあるが、例としては /xxx/include/ws/msw や /xxx/lib/gcc_lib/msw/wx にある。 ・/xxx/ で make[ret] してみた。 ・途中で例外を有効にするように言われたので有効にした。
|
- 【GUI】wxWidgets(旧wxWindows) その5【サイザー】
720 :デフォルトの名無しさん[sage]:2014/09/02(火) 13:46:50.57 ID:TmMSlGm8 - ・regex, zlib, jpeg, png, tiff は全て無効にしていたにも関わらず、
src/regex, src/zlib, src/jpeg, src/tiff にしかない *.h ファイルが見つから ないエラーとなった。。 そこで、Makfileを直接修整して、CPPFLAGS に -I 指定によって、上記ディレクトリ を最後尾に追加した。 ・make には成功した。 ・/xxx/ に大量の *.o ファイルが作られ、*.a は /xxx/lib/ に作られた。 /build/msw から make した場合は、/xxx/lib/gcc_lib に作られるのと対照的 である。 ・/xxx/samples/console で make してみたら、成功した。 ・「プロシージャエントリポイント _gxx_persolanity_v0 が ダイナミック リンク ライブラリ libstdc++-6.dll から見つかりませんでした。」 のメッセージボックスが出て起動できず。 ・Makefileを書き換えて、LIBS の最後に -lstdc++ を書いても症状は治まらない。
|
- 【GUI】wxWidgets(旧wxWindows) その5【サイザー】
721 :デフォルトの名無しさん[sage]:2014/09/02(火) 13:48:11.36 ID:TmMSlGm8 - ・regex, zlib, jpeg, png, tiff は全て無効にしていたにも関わらず、
src/regex, src/zlib, src/jpeg, src/tiff にしかない *.h ファイルが見つから ないエラーとなった。。 そこで、Makfileを直接修整して、CPPFLAGS に -I 指定によって、上記ディレクトリ を最後尾に追加した。 ・make には成功した。 ・/xxx/ に大量の *.o ファイルが作られ、*.a は /xxx/lib/ に作られた。 /build/msw から make した場合は、/xxx/lib/gcc_lib に作られるのと対照的 である。 ・/xxx/samples/console で make してみたら、成功した。 ・「プロシージャエントリポイント _gxx_persolanity_v0 が ダイナミック リンク ライブラリ libstdc++-6.dll から見つかりませんでした。」 のメッセージボックスが出て起動できず。 ・Makefileを書き換えて、LIBS の最後に -lstdc++ を書いても症状は治まらない。
|
- 【GUI】wxWidgets(旧wxWindows) その5【サイザー】
722 :デフォルトの名無しさん[sage]:2014/09/02(火) 16:41:02.66 ID:TmMSlGm8 - console.cpp の中身を printf() だけを使う4行の main() 関数だけに
書き換えてみたら問題なく起動して普通に文字列が表示された。 なので、MinGW 環境の問題ではなさそう。
|
- 【GUI】wxWidgets(旧wxWindows) その5【サイザー】
723 :デフォルトの名無しさん[sage]:2014/09/02(火) 17:12:10.67 ID:TmMSlGm8 - wxPrintf()だけを使った console 版 hello world が、static link
で 96,468 bytes で済んだ。 ところが、wxString を使った場合、作成した exe を実行しようとすると >>721 後半で書いたメッセージ・ボックスが出て起動できない。
|
- 【GUI】wxWidgets(旧wxWindows) その5【サイザー】
725 :デフォルトの名無しさん[sage]:2014/09/02(火) 17:44:29.48 ID:TmMSlGm8 - >>724
ダイナミックライブラリであるところの libstdc++-6.dll は既に読み込めているんですわ。 「libstdc++-6.dll から見つかりませんでした。」 の「から」がそれを表している。 なお、configureを使わずに、build/msw から build したライブラリだと wxStringとwxPrintfだけを使ったconsoleアプリは、静的リンクでも 451,584 バイトで済むことが判明。こちらはちゃんと起動できる。
|
- 【GUI】wxWidgets(旧wxWindows) その5【サイザー】
727 :デフォルトの名無しさん[sage]:2014/09/02(火) 19:56:42.14 ID:TmMSlGm8 - MinGW/bin を
i686-pc-mingw32-g++ と MinGW/bin/g++ は別物らしくコンパイラのサイズ (作ったプログラムのサイズではなく変換機のサイズ)がそもそも違う。 また、前者では、リンク段階で何もエラーを出さないが、 後者では、ちゃんと、_gxx_persolanity_v0 や _Unwind_Resume が undefined reference というエラーになる。
|
- 【GUI】wxWidgets(旧wxWindows) その5【サイザー】
728 :デフォルトの名無しさん[sage]:2014/09/02(火) 20:00:33.47 ID:TmMSlGm8 - >>726
最初、xxx dw2 yyy.dll が見つからない、と言うメッセージ・ボックス が出たのだが、そのdllを検索すると MinGW/bin にある事が分かって、 そこにパスを通したらそのメッセージ・ボックスは出なくなった。 その代わりに >>721 のメッセージ・ボックスが出るようになった。
|
- 【GUI】wxWidgets(旧wxWindows) その5【サイザー】
729 :デフォルトの名無しさん[sage]:2014/09/02(火) 20:55:48.58 ID:TmMSlGm8 - 結論的に言うと、自分のローカルにMinGW32 の別バージョンが沢山あった。
サンプルのコンパイルに使われたのと同じMinGW32のbinだけをパスに 設定してからサンプルを起動すると実行できるようになった。 実行結果も問題ない。実行ファイルはstripするとサイズが小さくなったが、 >>691のライブラリをリンクした物よりも大きくなってしまった。 [wxStringを使った最小な cui program のサイズ] ・>>691 のwxライブラリ使用時 : 451,584 bytes コンパイラは CodeBlocks付属のMinGW ・configureしたwxライブラリ使用時 : 547,342 bytes コンパイラは cygwinにインストールしたMinGW [wxFrameを使った最小な gui program のサイズ] ・>>691 のwxライブラリ使用時 : 1,611,264 bytes コンパイラは CodeBlocks付属のMinGW なお、今回は、>>719-720 のような不具合を回避するため、RegExや、png,jpeg,tiff,zlib などはconfigureで有効にしておいた。そうすると>>720の最初のヘッダファイル問題は 消えたので、何か良いことがあるかと思ったから。ただし、様子を見るとそれは必要なかった かも知れない。サイズ縮小のためには disable にすべきかも。
|
- 【GUI】wxWidgets(旧wxWindows) その5【サイザー】
731 :デフォルトの名無しさん[sage]:2014/09/02(火) 22:46:11.97 ID:TmMSlGm8 - cygwin版のMinGWと、cmd.exe 版のMinGWって結構違うような気がしてきた。
Makefileなんかもcygwin版だと/cygdrive/c/xxx/yyy/zzz の形式になっている のに対し cmd.exe版は c:\xxx\yyy\zzz になっているらしい。 また、コンパイラに -I 指定したパスなんかも同様の違いがあるらしく、 configureが作ったMakefileは、cygwin版MinGW用で、 cmd.exe版のMinGWでは、#inclde "wx/setup.h" のパスが探せなかったり する。 build, host, target の指定は、全て mingw を指定していたのだから、 cygwinが入り込む余地は無かったはず。これは、configure.inか、 Makefileのどちらかを自前で修整する必要がありそう。 さらに、makeが(?) process_begin: CreateProcess(NULL, sh xxxxxx, ...) failed. というエラーを出すことがあり、その原因を探る必要もある。
|
- 【GUI】wxWidgets(旧wxWindows) その5【サイザー】
733 :デフォルトの名無しさん[sage]:2014/09/02(火) 22:56:38.09 ID:TmMSlGm8 - cygwin版のMinGWと、cmd.exe 版のMinGWって結構違うような気がしてきた。
Makefileなんかもcygwin版だと/cygdrive/c/xxx/yyy/zzz の形式になっている のに対し cmd.exe版は c:\xxx\yyy\zzz になっているらしい。 また、コンパイラに -I 指定したパスなんかも同様の違いがあるらしく、 configureが作ったMakefileは、cygwin版MinGW用で、 cmd.exe版のMinGWでは、#inclde "wx/setup.h" のパスが探せなかったり する。 build, host, target の指定は、全て mingw を指定していたのだから、 cygwinが入り込む余地は無かったはず。これは、configure.inか、 Makefileのどちらかを自前で修整する必要がありそう。 Makfileの / を \ で置換して、/cygdrive/x/ を x:/ にしてみたら結構 行ける。途中、pch でファイルにアクセス拒否で書き込めないと言われるが、 もう一度 make すると、何事も無かったように続行する。
|
- 【GUI】wxWidgets(旧wxWindows) その5【サイザー】
734 :デフォルトの名無しさん[sage]:2014/09/02(火) 22:57:58.06 ID:TmMSlGm8 - >>732
wx アプリのサイズダウンの仕方関連なんだけど。
|