トップページ > プログラム > 2014年09月02日 > TmMSlGm8

書き込み順位&時間帯一覧

1 位/203 ID中時間01234567891011121314151617181920212223Total
書き込み数00000000000103001201203013



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
MFC相談室 mfc22d.dll
【GUI】wxWidgets(旧wxWindows) その5【サイザー】

書き込みレス一覧

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 アプリのサイズダウンの仕方関連なんだけど。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。