X



【GUI】wxWidgets(旧wxWindows) その5【サイザー】
0001デフォルトの名無しさん
垢版 |
2010/04/09(金) 15:12:36
クロスプラットフォーム GUI ライブラリの wxWidgets (旧 wxWindows)についてのスレ。

本家
 ttp://www.wxwidgets.org/
wxWindows日本語プロジェクト
 ttp://wxwindowsjp.sourceforge.jp/
Cross-Platform Programming with wxWidgets
 ttp://wxwidgets.info/
Let's wxWidgets
 ttp://dot-gray.s33.xrea.com/
wxWindowsで始めるC++ GUIプログラミング
 ttp://www.h3.dion.ne.jp/~k5_n/wxwin/
wxWidgets でクロスプラットフォーム GUIアプリを作ろう
 ttp://0xcc.net/pub/uu-2004-08/

前スレ
【GUI】wxWidgets(旧wxWindows) その4【サイザー】
http://pc12.2ch.net/test/read.cgi/tech/1214657360/
0311デフォルトの名無しさん
垢版 |
2011/12/06(火) 14:11:37.79
>>310
下のサイト
http://www14.ocn.ne.jp/~bkclass/doc_wxsamples.html
を見て、サンプルのソース実行して勉強してたんですけど、accessっていうサンプルをコンパイルして実行をしようとすると、
"This sample has to be compiled with wxUSE_ACCESSIBILITY"
というメッセージが出たので、
Windowsのみ本体のwxUSE_ACCESSIBILITYを1にする、とは書いてあったんですが、動いてないということはLinuxでも必要なのかと勝手に思い込んでこちらで聞いてみたんですが、やっぱりLinuxでは意味が無いんでしょうか…
0312311
垢版 |
2011/12/06(火) 14:27:45.09
度々すみません。
こちらでもマニュアルを確認したら、accessはWindowsのみと書いてありました。
今度からはマニュアルを良く読んで、わからなかったらこちらで聞きたいと思います。
自分自身でもあんまりにゆとりすぎて反省してます…。
みなさん大変ご手数をおかけしました。
0314デフォルトの名無しさん
垢版 |
2011/12/07(水) 19:17:24.24
ゆとりはHSPとかC#に行くだろうからこっちには来ないだろうな
あとC++のGUIライブラリで有名で日本語ドキュメントがあるのはQtとかgtkだろうからさらにやる人は減る
最後にwxWidgetsは英語の知識とC++のオブジェクト指向がわかってないとできないから挫折する人も多いだろう

とゆとりが言ってみる
0316デフォルトの名無しさん
垢版 |
2011/12/11(日) 22:40:24.44
wxWidgets > Qt なの?
0317デフォルトの名無しさん
垢版 |
2011/12/15(木) 13:37:15.62
いわゆるビジュアルプログラミング言語は
生産性を改善するという触れ込みでありながら、事実上普及していない

何でかは知らんけど、同じ大きさのモニタに表示できる情報量で
テキストに負けちゃうからっていう説を聞いたことがあるような
0318デフォルトの名無しさん
垢版 |
2011/12/16(金) 01:32:59.64
|....,,__
|_::;; ~"'ヽ
| //^''ヽ,,)
|  i⌒"
| ∀`) < 誰もいない きのこるならいまのうち
|⊂
| ノ
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
      |( ´∀`) < きのこ のこーのこ げんきのこ ♪
      |(ノ   |つ
      |     |
     ⊂ _ ノ
       ""U
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
     (´∀` )| < エリンギ まいたけ ブナシメジ ♪
    ⊂|  (ノ |
      |     |
      ヽ _ ⊃
      .U""
|
| ミ
| ミ  サッ!
| ミ
|
0319デフォルトの名無しさん
垢版 |
2011/12/16(金) 06:38:53.32
下記のページ
http://docs.wxwidgets.org/2.8/wx_wxcommandevent.html

でwxCommandEventを勉強していたのですが、
GetIntとGetSelectionの違いがよく分かりません。

GetIntは
wxCommandEvent::GetInt
int GetInt()
Returns the integer identifier corresponding to a listbox, choice or radiobox selection (only if the event was a selection, not a deselection), or a boolean value representing the value of a checkbox.

と書いてあり、GetSelectionは
Returns item index for a listbox or choice selection event (not valid for a deselection).

と書いてあるのですが、GetIntの選択されたリストボックスに対応付けられたInt型と言うのはGetSelectionで返される値と何か違うものなのでしょうか?
0320デフォルトの名無しさん
垢版 |
2011/12/16(金) 13:32:13.51
ver 2.8.12
include/wx/event.h
538: int GetSelection() const { return m_commandInt; }
554: int GetInt() const { return m_commandInt; }
0321デフォルトの名無しさん
垢版 |
2011/12/22(木) 01:35:21.75
リストボックスの中に、入れ子でリストボックスを作りたいと思いマニュアルを見て、wxListBoxのメンバ関数であるCreate関数を利用すれば2段階リストが構成できるということまではわかったのですが、Create関数の使い方がいまいちわかりません。

お手数ですが、どなたか使い方を教えていただきませんでしょうか。
0323デフォルトの名無しさん
垢版 |
2011/12/22(木) 18:41:37.88
wxRegExを使うため、wxregexライブラリをビルドし、成功しました。
しかし、いざプログラムで「wxRegEx」クラスを使おうとすると、「error C2065: 'wxRegEx' : 定義されていない識別子です」というエラーが出て、全く使えません。
思いつく方が居たらお願いします。

OS: Windows 7
wxWidgets: 2.9.1
コンパイラ: Visual C++ 2010 Express
0324デフォルトの名無しさん
垢版 |
2011/12/22(木) 18:52:26.42
>>323
すいません、プリコンパイル済みヘッダを再作成してみたらうまくいきました。
スレ汚しすいません……
0326デフォルトの名無しさん
垢版 |
2011/12/23(金) 01:55:47.35
mingwの時点でOSはWindowsなのに
>どいつもこいつもマイクロソフトの犬だな
とか書くのかよw
0328デフォルトの名無しさん
垢版 |
2011/12/23(金) 16:08:42.36
wxWidgetsはWindows以外はおまけだろ。
Win32のラッパーとしての価値しかないと思っている。
0331デフォルトの名無しさん
垢版 |
2011/12/24(土) 17:54:24.54
migw もなぁ…64bit対応がなぁ…
wxruby とか使いたくても使えないよ

しかしひとはビルドしろという
なんどでもビルドしろという
びるどしろー
0333デフォルトの名無しさん
垢版 |
2011/12/25(日) 08:31:41.01
MSWでwxListCtrlを使ってみたらDESELECTEDイベントが通知されないバグがあったので
クリックやキボード操作が行われる度に選択状態を自分でチェックしてDESELECTEDイベントを送るようにしたら
アイテムが1個の時に何故かマウスイベントが消し去られるバグまで出てきて
もう八方塞がりです
なにこれ馬鹿
0338デフォルトの名無しさん
垢版 |
2011/12/27(火) 12:10:40.98
最近wxTreeCtrl使ってるけどイベント通知できんわ
仕様がわかってないだけかも知れんが、バグだったら報告しなきゃだな
0341338
垢版 |
2011/12/27(火) 23:00:49.89
今日ちょっとwxTreeCtrlの全イベント試してみたが、特に問題なかった。環境はMSW(MinGW)

>>340
英語が多くてドキュメントがAPIリファレンスしかないのがある意味バグw
この前wxXMLをHTMLに使ったら一気にバグってワロタ(当たり前だけど)

それさえ超えればいいものだと思います
0343デフォルトの名無しさん
垢版 |
2011/12/28(水) 08:03:39.44
バグとか明らかに仕様とは違う動きをしたりすることは多々あるけど
もともとネイティブAPIをラップしただけだから誤魔化せるかもしれない
結局のところネイティブレベルの知識とwxWidgetsの中身まで調べないといけないので時間はかかる
それでもネイティブコンパイル出来ないC#も嫌だし、MFCよりは遥かにましだけどw
ネイティブレベルのことをしたくてGUIも楽に作りたいって要求に答えてくれるものがないもんな
0344デフォルトの名無しさん
垢版 |
2011/12/28(水) 15:34:13.86
>>341
英語なのはキツイけどほかに良いライブラリも見当たらないし我慢するw

>>343
バグがあるってのはちょっと残念だなぁ
ネイティブレベルの知識もそんなに無いし不安だ・・・
けど、大きなバグじゃないのなら少し使ってみようと思います。
0345デフォルトの名無しさん
垢版 |
2011/12/29(木) 15:13:49.10
649 デフォルトの名無しさん [sage] 2011/12/29(木) 14:50:37.28 ID: Be:
学生プログラマ日本一決定戦(予選は社会人も参加可)
ttp://codevs.jp/howto.html
現在予選開催中
応募締切 2012.1.6 12:00

おもしろいことやっているじゃん。誰か今から参加しろよ。
0346本田
垢版 |
2011/12/31(土) 22:24:08.47
>>340
http://www.wxwidgets.org/
wxWidgets 2.9.3 Released
2011-12-14

While this is still officially a development release because some API details are still not frozen,
we believe that 2.9.3 can be used in production environment,
especially for the new projects for which (small) changes in behaviour since 2.8 are not a problem.
Give it a try and let us know what do you think!
0348デフォルトの名無しさん
垢版 |
2012/01/01(日) 11:14:18.13
サイザーage
0350 【大吉】
垢版 |
2012/01/01(日) 13:38:44.46
今年はwx使うことあるかなー
0352デフォルトの名無しさん
垢版 |
2012/01/05(木) 01:29:02.25
wxTextCtrlの内容を一行ずつ読み込みたいです。
行数を調べるのに以下のやり方でいいのかと考えたのですがエラーがでます。

size_t abc = wxTextCtrl::TextCtrl1.GetNumberOfLines();

コンパイルすると以下のエラーがでます。

C:\Users\x\Desktop\practice\practiceMain.cpp||In member function 'void practiceFrame::OnButton2Click(wxCommandEvent&)':|
C:\Users\x\Desktop\practice\practiceMain.cpp|225|error: 'TextCtrl1' is not a member of 'wxTextCtrl'|

http://docs.wxwidgets.org/2.9.3/classwx_text_file.html
ここを見るとメンバー関数と書いているようなのですが、何か考え違いをしていると思うのですが・・
教えてください。
0354デフォルトの名無しさん
垢版 |
2012/01/05(木) 02:10:29.44
>>353
レスありがとうございます。

リンクを間違っていました。 以下を参考にしました。
http://wxwindowsjp.sourceforge.jp/docs/html/wx/wx381.htm#wxtextctrlgetnumberoflines

IDEは、CODE::BLOCKS SVN:7550を使用しています。

試しに以下のことをやってみたのですがエラーがでました。
int abc = TextCtrl1.GetNumberOfLines(TextCtrl1);
C:\Users\x\Desktop\practice\practiceMain.cpp|225|error: request for member 'GetNumberOfLines' in '((practiceFrame*)this)->practiceFrame::TextCtrl1', which is of non-class type 'wxTextCtrl*'|
int abc = TextCtrl1.GetNumberOfLines();
C:\Users\x\Desktop\practice\practiceMain.cpp|225|error: request for member 'GetNumberOfLines' in '((practiceFrame*)this)->practiceFrame::TextCtrl1', which is of non-class type 'wxTextCtrl*'|

wxTextCtrl1は、CODE::BLOCKSのGUIの部品を貼り付けています。
0355デフォルトの名無しさん
垢版 |
2012/01/05(木) 02:31:38.99
>>354
全体のコード見てないからなんとも言えないが、TextCtrlはprivateとかで宣言しないと外から触れんぞ


Frame.h
private :
wxTextCtrl* m_text;

Frame.cpp

// メソッド内にテキストコントロール配置
m_text = new (.....);

m_text->Hogehoge();
0356デフォルトの名無しさん
垢版 |
2012/01/05(木) 12:59:53.67
>>355
レスありがとう。

int abc = TextCtrl1 -> GetNumberOfLines();

と書けば、エラーなくコンパイルできました。

本当にありがとうでした。
0359デフォルトの名無しさん
垢版 |
2012/01/06(金) 15:41:25.76
テキストファイルを読み込む時に、utf-8のファイルの場合はreadして読み込むことができます。
テキストファイルがsjisの場合、次のようなエラーメッセージが表示されます。
[Faild to convert file "z:\test.txt" to unicode

http://docs.wxwidgets.org/2.9.3/classwx_text_file.html
http://docs.wxwidgets.org/2.9.3/classwx_conv_auto.html
上記を読むと、wxConvAuto機能を使用すると自動的にコンバートしてくれるように記載されているように見えます。

それで、openするときに、wxConvAuto()を付け加えてみたのですがエラーがでます。
wxConvAutoは付けても、付けなくても同じ現象です。
tfile.Open(file,wxConvAuto());

TextCtrl1->SetValue(str);
に、utf-8のファイルを読み込むと内容が反映されます。
sjisだとオープン時に(本当にオープンするときのエラーかどうかはわかりませんが・・・)上記エラーがでます。
またTextCtrl1にはテキストファイルの内容が反映されません。

どこが悪いか教えてください。
0360デフォルトの名無しさん
垢版 |
2012/01/06(金) 15:42:52.53
すいません、ソースコードは短めなので、こちらに書きます。

wxString file,str,s,number;
wxTextFile tfile;

wxFileDialog fdlog(this,_T("テキスト読み込みファイルの選択"),
wxEmptyString, wxEmptyString, wxEmptyString,
wxFD_OPEN);
if(fdlog.ShowModal() != wxID_OK) return;
{
file.Clear();
file = fdlog.GetPath();
tfile.Open(file,wxConvAuto());
wxLogMessage(_T("オープンできました。"));
str = tfile.GetFirstLine();
s = str;
str += '\n';
while(!tfile.Eof())
{
s= tfile.GetNextLine();
str += s;
str += '\n';
}
TextCtrl1->SetValue(str);
wxLogMessage(_T("読み込み完了しました"));
tfile.Close();

こんな感じです。
0361デフォルトの名無しさん
垢版 |
2012/01/06(金) 16:25:17.96
wxTextCtrlの中身を印刷したいのですが、どのようにすればいいのかいまいち分かりません。
どこかにwxTextCtrlのアドレスか何かを渡せばよいのでしょうか?教えてください
0362デフォルトの名無しさん
垢版 |
2012/01/06(金) 18:45:10.90
>>360
過去スレにもSJIS読み込みについての事例が沢山あるが、wxWidgetsのライブラリによるSJIS→UTF-8の変換は全く期待できない
結論としては「UnicodeビルドしてUTF-8で読み込め」でFAだとおもう

おすすめはlibiconvでUTF-8に変換してからwxWidgets内に読み込む
iconvはwikipediaにもサンプルコードがあるから、使うのは難しくないはず http://ja.wikipedia.org/wiki/Iconv

>>361
wxWidgets2.9.3のクラスリファレンス見れ、いっぱい使えそうなのあるぞ

wxPrintData
wxPrintDialog
wxPrintDialogData
wxPrinter
wxPrinterDC
wxPrintout
wxPrintPreview
0363361
垢版 |
2012/01/06(金) 19:18:13.20
印刷の件ですが、wxPrinterDCにwxTextCtrlの値を渡せばWindowsでは印刷することができました。

しかし、LINUX(ubuntu11.10)環境下では、印刷プレビューを見る限りではうまくいっている様に思えるのですが、実際に印刷してみると(test wordsと言う文字を1部だけ印刷しようとしました。)、
1枚目のプリントに下記のようなエラーが印刷され、その後プリンタが無限に白紙を出しつづけるという不具合が起こりました。

%!PS-Adobe-3.0 %%Creator: Gnome Print Version 2.18.8 %%CreationDate: D:201201061

この不具合は、wxWidgets2.8.12の印刷用のサンプルプログラムprintingの内容を印刷しようとしても起きてしまったので、
参考にしたサンプルその物がどこかおかしいか、こちらの印刷まわりの設定がおかしいかのどちらかだと思うので、とりあえず上記のエラーを調べてみます。


>>362
レスありがとうございます。
一応読んではいたのですが、いまいちよく分からなかったのでここに頼ってしまいました。住みません。
0364デフォルトの名無しさん
垢版 |
2012/01/06(金) 19:42:20.71
さっきShift_JISで読み込むのは無理だと言ったがそれは嘘だ(コマンドー風に)

下みたいなテストプログラムで普通にShift_JIS読み込めてワロタ
2.9.3パない

// テキストファイルの読み込み
wxTextFile file(wxT("./Shift_JIS.txt"));
file.Open(wxConvAuto(wxFONTENCODING_CP932));
wxString test = file.GetFirstLine();

frame->SetStatusText(test);
frame->Show(true);
0365デフォルトの名無しさん
垢版 |
2012/01/07(土) 21:53:08.88
>>362>>364
レスありがとうございます。
試しに以下のように入力してコンパイルしてみました。

wxTextFile file(wxT("c:\\Shift_JIS.txt"));
file.Open(wxConvAuto(wxFONTENCODING_CP932));
wxString test = file.GetFirstLine();

コンパイルすると、下記エラーがでます。
C:\Users\x\Desktop\practice\practiceMain.cpp|154|エラー: no matching function for call to 'wxConvAuto::wxConvAuto(wxFontEncoding)'|

wxwigetsは,2.8.12を使用しています。
コンパイルが通らない原因が、わからにので2.9.3のソースをダウンロードしてコンパイルを試しています。


cドライブ直下に、MinGWとmsysというのを導入後、msys.batで端末?を起動しました。
そこで、./configure --disable-shared --enable-monolithic --enable-unicodeと行い、make make installまでは行いました。
make installした成果物?をwindowsの実行環境にどうもっていくか調べているところです。

何が悪いか手探りなので的外れなことしてるような気もするんですが、これしかできないのでとりあえず2.9.3の環境を作ってみます。
0366デフォルトの名無しさん
垢版 |
2012/01/07(土) 22:42:42.75
>>365
やりかたは間違ってないとおもうので頑張って
今ちょっとクラスリファレンス見てたけど

wxTextFileの部分で::Openで取れる引数が2.8から2.9で変わってるみたい

wxWidgets 2.8

bool Open(wxMBConv& conv = wxConvUTF8) const
bool Open(const wxString& strFile, wxMBConv& conv = wxConvUTF8) const

wxWidgets 2.9

bool Open (const wxMBConv &conv=wxConvAuto()) const
bool Open (const wxString &strFile, const wxMBConv &conv=wxConvAuto()) const

OpenメソッドにwxConvAuto()をとれるのが新機能みたい。2.8にはないんだな、これが。
0367デフォルトの名無しさん
垢版 |
2012/01/08(日) 00:03:23.41
>>366
わざわざ調べてくれてありがとうございます。

2.8にはない新機能だったんですね。
2.9.3にする励みになりました。

code::blocksで、コンパイル済みのものを入れるだけで1週間くらいかかった記憶があります。
コンパイルなど慣れないことをするので、今回も同じくらい時間かかるかもしれません。

でも2.9.3にする気にになりました。
ありがとうございました。
0368デフォルトの名無しさん
垢版 |
2012/01/09(月) 00:02:24.31
Mingwをcドライブ直下にインストール
PATHに、C:\MinGW\bin;C:\MinGW\mingw32\binを追加
c:\wxWigets-2.9.3を解凍

下記を参考にしました。
http://wiki.codeblocks.org/index.php?title=Compiling_wxWidgets_2.8.6_to_develop_Code::Blocks_%28MSW%29
オプションはcode::blocksで使用する場合のofficial supportと書いていたので下記とおりにしています。

コマンドプロンプトで下記実行
C:\Users\x>SET PATH=c:\mingw\bin;c:\mingw\mingw32\bin
c:\wxWidgets-2.9.3\build\msw>mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=release clean
c:\wxWidgets-2.9.3\build\msw>mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=release
c:\wxWidgets-2.9.3\build\msw>mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=debug clean
c:\wxWidgets-2.9.3\build\msw>mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=debug
c:\wxWidgets-2.9.3\lib\gcc_dll>copy *.dll %windir%

code::blocksの設定
settings>Enviroment>Enviromet variables
WSWIN=C:\wxWidgets-2.9.3
settings>Grobal Variable Editor
current varibale:wx
base: ${WXWIN}
include: ${WXWIN}\include
lib: ${WXWIN}\lib

開発環境のコンパイルが初めてで、これでいいのか不安ですが、code::blocks上のプロジェクトのコンパイルが通りました。
0369デフォルトの名無しさん
垢版 |
2012/01/09(月) 00:08:31.38
>>366

wxTextFile gfile(wxT("c:\\Shift_JIS.txt"));
gfile.Open(wxConvAuto(wxFONTENCODING_CP932));
wxString test = gfile.GetFirstLine();


tfile.Open(file,wxConvAuto(wxFONTENCODING_CP932));

二通りのやりかたでコンパイルが正常にできました。

また、sjisのファイルを読みこむこともできました。

ありがとうございました。
助かりました!!!
0370361
垢版 |
2012/01/09(月) 23:07:32.49
ubuntuでの印刷の件ですが、使っているプリンタのドライバがよくなかった様で、ドライバを変更したらうまく行きました。

現状、wxTextCtrl内の行が長すぎると用紙からはみ出てしまうので、適切なところで改ページするようにしたいと思っていますので、またもう少し考えてみます。
0371デフォルトの名無しさん
垢版 |
2012/01/11(水) 14:12:14.80
Linuxで開発したツールを知り合いの古い環境で動くかどうかテストしたら、libc.so.6が見当たらないっていうエラーが出てくるのですが、標準Cライブラリって動的リンクするしか方法はないのでしょうか?
その場合、作った実行ファイルは古い環境では動かないのかな…
一応./configure のオプションは
--with-gtk --enable-std_iostreams --enable-std_string
--enable-controls --disable-shared --enable-unicode --with-libjpeg=builtin
--with-libpng=builtin --with-regex=builtin --with-libtiff=builtin --with-zlib=builtin --with-expat=builtin

にして、プログラムのコンパイルは
g++ -o hoge.cpp `wx-config --cxxflags` `wx-config --libs`
g++ -o hoge.cpp `wx-config --cxxflags` `wx-config --libs` -static-libgcc -static-libstdc++
g++ -o hoge.cpp `wx-config --cxxflags` `wx-config --static --libs`
の3通りで実行ファイルを作ってそれぞれ試してもらったのですが、どれもlibc.so.6が利用できないというような意味のエラーが出てきます。
また
g++ -static -o hoge.cpp `wx-config --cxxflags` `wx-config --libs`
についても試しましたが、コンパイルエラーが大量に(主にライブラリが見当たらないといったようなエラー)が出てきます。
解決方法があるようでしたらご教授お願いします
0372デフォルトの名無しさん
垢版 |
2012/01/11(水) 18:34:11.40
>>371
エスパーしてみるわ

一応忠告しとくけどwxWidgetsは「同じソースコードからWin, Linux, Macで使えるバイナリがコンパイルできる」のであって
「LInuxでコンパイルしたバイナリがWindowsで使える」というわけではない。
それができるのはJavaだけ

上の問題ではないとしたら
Linuxでコンパイル→Linuxで使う、はライブラリが揃ってる限りいけるはず。

よって、既に生成している実行ファイルを友人の環境で「ldd <- 対象の実行ファイル ->」して
友人の環境で足りないライブラリを追加する

もしくは友人の環境でwxWidgetsのソースをコンパイルして「wx-config」が正しく使えるようにする。


0373372
垢版 |
2012/01/11(水) 18:39:33.34
というかlibc.so.6が足りないだけなら
実行ファイルと同じディレクトリにlibc.so.6を置いて実行すればいける気もする
0374デフォルトの名無しさん
垢版 |
2012/01/11(水) 20:17:58.74
>>372
レスありがとうございます。

LinuxでコンパイルしたファイルはLinuxでは使えない、というのはわかっています。私も知り合いも環境はLinuxです。
極力ユーザが煩わしくないように、実行ファイル以外のファイルをユーザが別途インストールする必要が無いようにしたいのですが、不可能なのでしょうか?下記サイト
http://up-cat.net/wxWidgets%A4%CE%A5%B9%A5%B9%A5%E1.html
によると、Javaとは違いランタイムがいらないと書いてありますが限度があるのでしょうか
一応Windows版は同じソースで私の周りの環境では問題なく動いたのですが…

libc.so.6を実行ファイルと同じフォルダにおけ、ということですが、共有ライブラリはlddコマンドで見れるような指定されているアドレスに置かなくても利用可能なのでしょうか?
その方法で動作するかもしれないのでまた試してみます。
0375デフォルトの名無しさん
垢版 |
2012/01/11(水) 21:04:03.63
>>374
> LinuxでコンパイルしたファイルはLinuxでは使えない、というのはわかっています。

いやわかってないだろ、どう見ても。
0376デフォルトの名無しさん
垢版 |
2012/01/11(水) 21:12:12.37
>>375
すみません間違いました。
LinuxでコンパイルしたファイルはLinux以外では使えない、というのはわかっています。です
0377デフォルトの名無しさん
垢版 |
2012/01/12(木) 00:36:38.89
>>376
自分の環境でコンパイルするときに正しく-staticオプションつけとけば、依存なしにバイナリを走らせることはできるはず
依存関係が出てるってことはstaticリンクビルドされてないのは間違いないので、そのアプリをちゃんとコンパイルしなおすべきかと
0378デフォルトの名無しさん
垢版 |
2012/01/12(木) 10:46:49.97
>>377
レスありがとうございます。

-static-libcというコマンドは存在しないみたいで、どのようにオプションをつければlibcを静的リンクすればいいのか、自分なりに調べてみたのですがよく分からないのでできれば教えていただきたいです。
0379デフォルトの名無しさん
垢版 |
2012/01/12(木) 12:10:12.07
>>378
リンク時に「-static」とつければいいです
この意味がわからなければ
gcc,CXXFLAGS,LDFLAGS ,MAKEFILE、リンカとかのキーワードでググってね
0380デフォルトの名無しさん
垢版 |
2012/01/12(木) 15:19:19.22
>>379
g++ -static -o hoge.cpp `wx-config --cxxflags` `wx-config --libs`
でコンパイルしていたのですが、下記のようなエラー(長いので前半部分だけです。ごめんなさい。)が出るのですが、./configureのオプションか何かが足りないのでしょうか…

/usr/bin/ld: cannot find -lgdk_pixbuf-2.0
/usr/local/lib/libwx_baseu-2.8.a(baselib_dlunix.o): In function `wxDynamicLibrary::GetProgramHandle()':
dlunix.cpp:(.text+0x13): warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/libgio-2.0.a(libgio_2_0_la-glocalfileinfo.o): In function `lookup_gid_name':
(.text+0x1a5c): warning: Using 'getgrgid_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/local/lib/libwx_baseu-2.8.a(baselib_utilsunx.o): In function `wxGetUserHome(wxString const&)':
utilsunx.cpp:(.text+0x14f5): warning: Using 'getpwnam' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
utilsunx.cpp:(.text+0x157a): warning: Using 'getpwuid' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/libglib-2.0.a(gutils.o): In function `g_get_any_init_do':
(.text+0xe2a): warning: Using 'setpwent' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/libglib-2.0.a(gutils.o): In function `g_get_any_init_do':
(.text+0xe40): warning: Using 'endpwent' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

0381デフォルトの名無しさん
垢版 |
2012/01/12(木) 18:33:37.54
>>380
どこまで甘えてんだよ
少しは自分で調べてください・・・少しはソースを見やがれ

まず1行目
-lgdk_pixbuf-2.0

こいつの意味は「libgdk_pixbuf-2.0.a」という名前のライブラリをリンクするという意味
調べたらGNOMEプロジェクトの1つみたいだな
http://ftp.gnome.org/pub/GNOME/sources/gdk-pixbuf/

まあこいつはyumでもapt-getでもなんでもいいからインストールすればいいだろ
インストール後に /usr/lib 直下に上で書いたライブラリがあればコンパイルは通るはず

2行目より後は警告だから無視してもいいのかもしれないが、意味としては
「warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking」
「警告:コンパイルに使っとるglibcがシェアードライブラリじゃねーか、スタティックライブラリでリンクしろよクソ野郎」

という感じですか、間違ってたらすまん。頑張ってgdk-pixbufとwxとglibのライブラリを手に入れてください(もちろんスタティックライブラリで)
0382デフォルトの名無しさん
垢版 |
2012/01/12(木) 18:42:52.46
あ、でも
「warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking」系のエラーは
スタティックライブラリを使っても出ることがあるみたいだな。
つーことは一番の目標はgdk-pixbufをインストールすることか。簡単じゃん。
0384デフォルトの名無しさん
垢版 |
2012/01/12(木) 20:59:28.67
>>381
後から見返してみると私の状況説明がたりないため、自業自得ですが、
どこまで甘えてんだよと言われましても>>379までの-staticオプションをつけてコンパイルする、というのは>>371ですでにためしたと説明したつもりだったのですが、すみません。

一応こちらでもできる限りのことを調べて、ソースも読んでから書き込んだつもりですが、調べたことをかけてなかったら確かに意味がありませんね。

一応libgdk-pixbuf-2.0.0、libgdk-pixbuf-2.0.dvg はインストール済みで、wxWidgetsはもちろん入れています。glibやlibcもapt-cache searchを使って目についた関連がありそうなものをインストールしまくって、コンパイルした結果上記のエラーが出ています。
また、libc.aと言うファイルを5時間ほど探しつづけましたが見当たらず、また、下記のリンクの一番下の回答者の
Check your Output mode settings, I believe you have linking set to "static". So the linker is looking for libgdk-pixbuf-2.0.a, which is probably not present. If you switch it to "shared" it should begin to work..

http://www.ultimatepp.org/forum/index.php?t=rview&goto=34857&th=6160

をみると、私の英語力ではlibgdk-pixbuf-2.0.0はstaticで出力できないと読めるため、八方塞がりとなり、ここで聞いた次第です。
気分を悪くしてしまってすみません。

>>383
自演ではないです。
0385デフォルトの名無しさん
垢版 |
2012/01/12(木) 21:16:37.55
>>384
お前さんが知り合いの古い環境と同じ環境作って、
その環境でwxWidgetsとそのツールビルドすればええやん
0386381
垢版 |
2012/01/12(木) 21:32:18.61
>>384
なんか思ったより込み入った問題みたいだな、キツイこと言ったかもしれないけど冗談だと思って聞き流してくだされ

ちょっとググッたけどlibgdk-pixbuf-2.0.0のスタティックライブラリが生成できないのはバグみたいだぞ
そして2番目のリンクではパッチとかも出てる
http://askubuntu.com/questions/7990/what-can-i-do-about-missing-libgdk-pixbuf-2-0-la
https://bugs.launchpad.net/ubuntu/+source/gtkglextmm/+bug/662572

で、対策としては gdk-pixbufのソースをとってきて
./configure --enable-static でいけるんではないかと思う(./configure -h したら一応あったけどこれは試した?)
0387381
垢版 |
2012/01/12(木) 23:04:21.77
gdk-pixbuf-2.21.3にて
./configure --enable-static
make
make install

できた。めんどくせえ。
0390デフォルトの名無しさん
垢版 |
2012/01/13(金) 00:05:23.76
>>385
レスありがとうございます
すみません。また書き方が悪かったですね。
知り合いの環境で動かしたのは、Linuxの環境で作成したバイナリファイルを、Linuxの他の環境で動くかどうかを確かめるためでしたので、知り合いの環境だけで動いても目的を果たせないんです。
linux環境すべてで動かせるとは思ってはいないのですが、せめて、多少のバージョン違いは克服したい、と思いまして。

>>386
レスありがとうございます
いえ、こちらが勝手に謝ってるだけだと思ってください。
そもそも自力で解決できないのが悪いんですし。
そしてまさかそこまで調べていただけるとは思いませんでした。
本当にありがとうございます。
パッチを試してみて、また報告します。
こちらのwxWidgetsのバージョンは2.8.12と2.9.3があるのですが、--enable-staticというオプションが確認できないので、調べてみます。
そしてちゃんと調べればきちんとパッチなども出てきたのですね…
これからはもっとよく調べてから書き込むことにします。
0391381
垢版 |
2012/01/13(金) 00:44:46.25
>>388
wxはgtkもラップしてますしおすし

>>390
質問に答えるついででビルドしてみただけだよん
0392371
垢版 |
2012/01/13(金) 02:21:19.65
>>388
ここでするべき質問ではなかったでしょうか…それ以前にちゃんと隅々まで調べておくべきでしたね

>>391
--enable-staticはgdk-pixbufの方のオプションでしたね。勘違いしました。
無事に静的ライブラリでリンクすることができました。本当に有難うございました。


しかし本当に見返すとひどいですね。半年ROMって出直すことにします。
0393デフォルトの名無しさん
垢版 |
2012/01/17(火) 01:29:32.09
過疎ってんのかと思ったら割と繁盛してた

XRCでローカライゼーション機能(wxLocale)に対応してるみたいですが、普通にXRC中に文字列書いておけば
コンバートしてくれるのでしょうか?
自分で試せって?そうですね、すいません

久々に何か書いてみたかっただけです(^0^)
0394デフォルトの名無しさん
垢版 |
2012/01/18(水) 14:29:53.54
2.8.12をソースからコンパイルしました。
>>368が間違っているかどうかわからないのですが、今のコンパイル環境を書きます。
CODE::BLOCKSを使用する前提なので、CODE::BLOCKSスレかと思ったのですが、
ここで質問させてもらっていたのでここに書きます。
windows 7 64bit/32bit共にmingwだと、2.8.12はコンパイルが行えなかったです。
mingwだとコンパイルできなかったので、tdm-gcc tdm-gcc-4.6.1をインストールしました。
tdm-gcc-4.6.1は、setupの時に32bitを選択しています。
ttp://forums.codeblocks.org/index.php/topic,15283.msg102557.html#msg102557

PATHにC:\MinGW32\bin;C:\MinGW32\mingw32\binを追加。

DOSプロンプトで以下を実行。(2.9.3)
C:\Users\x>SET PATH=c:\mingw\bin;c:\mingw\mingw32\bin
c:\wxWidgets-2.9.3\build\msw>mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=release clean
c:\wxWidgets-2.9.3\build\msw>mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=release CXXFLAGS="-fno-keep-inline-dllexport"
c:\wxWidgets-2.9.3\build\msw>mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=debug clean
c:\wxWidgets-2.9.3\build\msw>mingw32-make -j -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=debug CXXFLAGS="-fno-keep-inline-dllexport"
c:\wxWidgets-2.9.3\lib\gcc_dll>copy *.dll %windir%
(2.8.12)
C:\Users\x>SET PATH=c:\mingw\bin;c:\mingw\mingw32\bin
c:\wxWidgets-2.8.12\build\msw>mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=release clean
c:\wxWidgets-2.8.12\build\msw>mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=release CXXFLAGS="-fno-keep-inline-dllexport"
c:\wxWidgets-2.8.12\build\msw>mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=debug clean
c:\wxWidgets-2.8.12\build\msw>mingw32-make -j -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=debug CXXFLAGS="-fno-keep-inline-dllexport"
c:\wxWidgets-2.8.12\lib\gcc_dll>copy *.dll %windir%
0395デフォルトの名無しさん
垢版 |
2012/01/18(水) 14:41:08.38
何が間違っているのか教えてください。
wxWigets2.9.3を使用しています。
http://docs.wxwidgets.org/trunk/group__group__funcmacro__file.html#ga599c484cd4deea8fed7275a9a7e0a11c
ここを参考にしました。
wxRenameFile(_T("z:\\test.txt"),_T("z:\\test2.txt"));
コンパイル後、実行すると Failed to copy the file 'z:\test.txt' to 'z:\test2.txt' (error 2: 指定されたファイルが見つかりません。と表示されます。
zドライブ上には、test.txtファイルはあります。

試しに、下記を試すと実行できました。
  wxMkdir(_T("Z:\\T"));
wxMkdir(_T("Z:\\T"));

と実行すると、ディレクトリの作成と削除はできました。
2.9.3が開発版だからなにか問題があるかと思い、2.8.12を入れてみたのですが同じ現象です。

多分書き方が悪いんだと思うのですが、どこがわるいのかわかりません。

教えてください。



0398デフォルトの名無しさん
垢版 |
2012/01/18(水) 16:01:13.12
>>397
レスありがとうございます。
読み込み専用ではなかったのですが、windowsの拡張子を表示する設定にしていませんでした。
拡張子を表示する設定にしたところ、test.txt.txtになっていました。
すみません、初歩的な事を数日見逃していました。

レスありがとうございました。
0401デフォルトの名無しさん
垢版 |
2012/01/18(水) 18:24:47.81
>>394
エラーログを貼らないとどんなハッカーでも原因はわからんですよ^^;
そもそもCode::Blocksはビルドする必要ないような?初心者はバイナリバージョンをダウンロードすればいいと思うよ。
もしCode::Blocksの翻訳とかやってる方だったら全力支援しますが
0402401
垢版 |
2012/01/18(水) 18:27:55.92
ごめん>>401は忘れてください。ただの報告だったんですね・・・
またエラーかと思った
0404デフォルトの名無しさん
垢版 |
2012/01/22(日) 22:48:49.88
wxWidgets2.9.3を使用しています。
下記リンクを参考にしました。
http://docs.wxwidgets.org/trunk/classwx_string.html#a55b90a900c24e9555760265170dc051c

文字列の中に特定の文字が複数回出た場合の検索を行いたいです。

.find()この中に、aとか、txtとか入れると、最初の桁数だけ検索できます。
たとえば、[t]と入力すると、文字列の中に4回でてきますが、一個目のものしか検索されません。
また、[猫]や[犬]などを入力すると、ループの処理に入らずすぐに終了します。
[あ] を入力すると、1回ループ処理に入っているますが、検索結果に0が帰ってきます。

コードは以下のようになっています。

//wxString gpath C:\Users\x\Desktop\practice\猫犬象aAbB猫猫猫犬犬あいう.txt
    wxString bb,cc,dd;
size_t pos=0;
if((pos=::gpath.find(("猫"),pos))!= wxString::npos)
{
wxMessageBox(_T("ループ 処理開始"));
pos = ::gpath.find("猫",pos);
cc.Printf(_T("%d"),pos);
dd += cc;
dd += "\n";
pos + 1;
wxMessageBox(_T("ループ 判定処理に戻る"));
}
readpos -> SetValue(dd);
wxMessageBox(_T("終了"));

文法?など、何が間違っているか教えてください。
0405デフォルトの名無しさん
垢版 |
2012/01/22(日) 23:59:25.48
>>404
wxString gpath = L"C:\\Users\\x\\Desktop\\practice\\猫犬象aAbB猫猫猫犬犬あいう.txt";
wxString word = L"猫";
wxString result;
size_t pos = 0;
wxMessageBox(_T("ループ 処理開始"));
while ((pos = gpath.find(word, pos)) != wxString::npos) {
result += wxString::Format(L"%d\n", pos);
pos += word.size();
wxMessageBox(_T("ループ 判定処理に戻る"));
}
OutputDebugStringW(result.c_str());

pos + 1はpos += 1のタイポだと好意的に解釈するにせよ、それでも
「何故1なのか」が理解できてないのはちょっとまずい。
ifとwhileの区別が付いてないのもかなり厳しい。
charとwchar_tの違いについてとか、
1. (pos = gpath.find(word, pos)) != wxString::npos
2. pos = gpath.find(word, pos) != wxString::npos
は全く意味が違う、とか。
wxWidgets以前に、まず基本的な文法を押さえることから始めた方がいいと思う。
0406デフォルトの名無しさん
垢版 |
2012/01/23(月) 01:28:04.42
>>404
レスありがとうございます。

>>ifとwhileの区別が付いてないのもかなり厳しい。
理由がわからないので、whileとifを書き直してテストしてました。
これは、コピペを修正するのを忘れていました。 
ただ、最初はforで試したのですが、まったくだめでwhileやifなどを試してみました。
ただ理解してないのは間違いないです。

>>pos + 1はpos += 1のタイポだと好意的に解釈するにせよ
検索後、ひとつ右の文字から再度検索したかったので +1 にしたのでタイプミスではありませんでした。
+=でないとだめとのことなので、考え方が間違っているのですね。
見直します。

>>charとwchar_tの違いについてとか、
charがabとか半角文字で、wcar_tが2バイト文字が許されると漠然と認識しています。
ユニコードビルドなので、wxStringを使用した場合すべて2バイト文字が許されると認識していましたが、
なんか違うようですね。
wxString word = L"猫”;
wxString::Format
など、知らないものがでてきたので、これも調べます。

ありがとうございました。
0407デフォルトの名無しさん
垢版 |
2012/01/23(月) 03:10:53.18
VCでもmingwでも pos + 1; に対してはWarning出すから、
ちゃんとWarningは読んで意味を理解しよう。
VC使ってるならステップ実行も使おう。

>charがabとか半角文字で、wcar_tが2バイト文字が許される
L""を知らなかった、ということはたぶん間違った理解をしてる。
まずはstring, wstringを使って両者についての理解を深めた方が良いかも。
ちなみにVCとmingwでwchar_tの定義は異なるので、それに気付かず両者を混同して
テストすると理解が深まるどころか発狂しそうになるので要注意。

知らないことが出てきたらまず自分で調べる、というのは正しい姿勢だし、
これからも是非継続してもらいたいけれども、この辺はもう完全にスレチなので、
c++初心者スレとかで聞いた方がいいと思う。
まあ頑張ってくれ。
0408デフォルトの名無しさん
垢版 |
2012/02/02(木) 23:41:58.22
TDM-GCC 32bit wxWidgets2.9.3を使用しています。
http://docs.wxwidgets.org/2.9.3/classwx_reg_ex.htmlを参考にしました。
http://2ch.ac.la/read.php/tech/1268979408/955 を参考にしました。
wxRegExの機能を使用したいです。

[ももも]猫[]け[2.5]犬象()aA b  B(2012年01月24日)猫猫__@(H23)_猫(わんわん)犬犬あいう.txt
という文字列から正規表現で文字を検索の仕方を調べています。
試しに\[...\]と正規表現をいれて実行したところ[ももも]というのは検索できました。

もうひとつ[2.5]というのも検索されているはずかなと思うのですが、とうやればいいかがよくわかりません。

以下のコードで、\[...\]で[ももも]は検索できました。

wxString search (L"\[...\]")
wxString text; (L"[ももも]猫[]け[2.5]犬象()aA b  B(2012年01月24日)猫猫__@(H23)_猫(わんわん)犬犬あいう.txt"
wxRegEx cktext(search);
wxString result;
if(cktext.Compile(search,wxRE_EXTENDED) == TRUE)
if( cktext.Matches(text,wxRE_NOTBOL))
result += cktext.GetMatch(text,count);

で、2件以上ヒットする場合はループにする必要があるかと次のようにしてみました。
0409デフォルトの名無しさん
垢版 |
2012/02/02(木) 23:49:55.81
if(cktext.Compile(search,wxRE_EXTENDED) == TRUE)
{
wxMessageBox(L"正規表現です。");
if( cktext.Matches(text,wxRE_NOTBOL))
{
wxMessageBox(L"マッチ処理に入りました");
count = cktext.GetMatchCount();
wxMessageBox(wxString::Format("%d",count));
for (size_t i=0 ; i < count ; count--)
{
wxMessageBox(L"マッチループ処理に入りました");
result += cktext.GetMatch(text,count);
wxMessageBox(L"いったんすとっぷ1");
results -> SetValue(result);
wxMessageBox(L"いったんすとっぷ2");
}
results -> SetValue(result);
} else {
wxMessageBox(L"マッチ処理にヒットしませんでした。");
}
} else {
wxMessageBox(L"正規表現ではありません。");
}
実行しますと、「マッチループ処理に入りました」メッセージの後に、
faild in GetMatch() invalid match indexと表示されます。
wxMessageBox(wxString::Format("%d",count));
ここで1が帰ってくるのですくなくとも1件はヒットしていると思うのですが・・・・

考え方や、ソースのどこが間違っているのか教えてください。
0410デフォルトの名無しさん
垢版 |
2012/02/03(金) 00:46:43.23
>>409
詰まったら詰まった現象を再現できる可能な限り短いコードを晒してくれ。
バグってる長いコードなんて誰も読みたくはない。

一応ヒントになりそうなコードは書いたが、
今回も残念ながらwxWidgets以前の問題だ。
正規表現に関してちゃんと勉強してくれ。

wxString regexText(L"\\[...\\](.)");
wxString text(L"[ももも]猫[]け[2.5]");
wxRegEx rx;
rx.Compile(regexText, wxRE_EXTENDED);

if (rx.Matches(text, wxRE_NOTBOL)) {
int n = rx.GetMatchCount();
for (int i = 0; i < n; ++i) {
wxMessageBox(rx.GetMatch(text, i));
}
}
レスを投稿する


ニューススポーツなんでも実況