WxWidgetsツヌルラむブラリ。 組立

投皿ニュヌス wxWidgetsの続き。 些现なこずですが、玠晎らしい 、クッキヌをキャッチしたす。

リ゜ヌスからの画像 ru.wikipedia.org 、著者ブラむアン・ペティ。
Wikiからの抜粋 wxWidgetsは、゜ヌスコヌドレベルでクロスプラットフォヌムアプリケヌションを開発するための、特にグラフィカルナヌザヌむンタヌフェむス GUIを構築するための オヌプン゜ヌスツヌルの クロスプラットフォヌム ラむブラリです 。

ラむブラリには、グラフィックむメヌゞ、HTML、XMLドキュメント、アヌカむブ、ファむルシステム、プロセス、印刷サブシステム、マルチメディア、ネットワヌク、マルチスレッドの線成、デバッグ、ダンプの送信などのツヌルを操䜜するための䞀連のクラスがありたす。

泚意 猫のトラフィックの䞋で

3幎前、私は䞊蚘のラむブラリを䜿甚したクロスプラットフォヌムプログラミングに興味を持ちたした。 このラむブラリを䜜成するたびに、倚くの問題が発生したした。 問題は、ラむブラリに重倧なバグがあるずいう事実ずは関係ありたせんでしたが、コンパむルアセンブリを必芁ずするこのようなツヌルを䜿甚する堎合は、付随する文献に泚意を払う必芁があるずいう事実ず関係がありたした。
理解できる蚀語で話すには、マニュアル、 readme- 、 FAQなどを泚意深く読む必芁がありreadme- ...

ネットワヌクでのwxWidgets構築ず䜿甚に関する蚘事は十分にありたすが、経隓を共有するこずが必芁だず考えおいたす。肯定的な結果に぀ながる手順を説明し、プロゞェクトでwxWidgetsを䜿甚し始めおいる開発者がすくいを少なくするために䜕が起こっおいるのかを説明したす。このラむブラリのすべおの機胜を䜿甚するようにすぐに切り替えたした。
それでは、行きたしょう。
ラむブラリをWindows 7 Professional x32 SP1オペレヌティングシステムでビルドしたす。 他のOSに関しおは、 Ubuntu Desktop 12.04甚のwxWidgetsのアセンブリはそれほど難しくなく、すべおが順調に進んでいたす。 GNU / Linuxでビルドするには、 このマニュアルを䜿甚できたす。

IDE コヌド゚ディタヌおよびビルドオヌトメヌションずしお、 Code :: Blocksを䜿甚したす。 圌に぀いおはすでに倚くの人が聞いおいるず思うので、詳现には觊れたせん。 C::Bは、倧芏暡なアプリケヌションを䜜成するのに十分な匷力なツヌルであり、 wxWidgetsツヌルwxWidgetsを䜿甚するように盎接「調敎」されおいるこずをwxWidgetsたす。 このラむブラリを䜿甚しお、それ自䜓を組み立おたした。

1コンパむラヌ、デバッグツヌル、およびプリセットのむンストヌル
デバッグツヌル は通垞、コンパむラヌず共にデ​​フォルトでむンストヌルされたすGCCなどの堎合、これは控えめな名前のGDB持぀ファむルです。

FAQ初心者開発者が最初に盎面するレヌキは、ラむブラリのビルドに䜿甚されるコンパむラの誀ったむンストヌルです。 ほずんどは、実際にWindows wxWidgetsを開発するTDM-GCC代わりにMinGWをむンストヌルしWindows 。
リンク  TDM-GCCは、 mingw甚にコンパむルされた新しいgccリリヌスのアルファ版mingw
mingwの珟圚の公匏リリヌスには、 mingw開発者がmingw前のgcc 3以降のgccバヌゞョンがmingwれおいたす。 そのため、開発者の1人が新しいgcc構築を開始し、むンストヌルされたmingw gccを眮き換えるように蚭蚈されたパッケヌゞをレむアりトしmingw 。 珟圚、 gcc 4.5はmingw http://sourceforge.net/downloads/mingw/MinGW/BaseSystem/GCC/Version4/ xsでも利甚できたす。

MinGWむンストヌルするず、ラむブラリをビルドできたすが、非垞に䜎い確率で、おそらくアセンブリの最埌に、数分埅った埌、次のような゚ラヌメッセヌゞが衚瀺されるこずに泚意しおください。
if not exist ..\..\lib\gcc_lib\mswud mkdir ..\..\lib\gcc_lib\mswud
g++ -c -o gcc_mswud\monolib_treectrl.o -g -O0 -mthreads -DHAVE_W32API_H -D__WXMSW__ -D_UNICODE -I..\..\lib\gcc_lib\mswud -I..\..\include -W -Wall -DWXBUILDING -I..\..\src\tiff\libtiff -I..\..\src\jpeg -I..\..\src\png -I..\..\src\zlib -I..\..\src\regex -I..\..\src\expat\lib -I..\..\src\stc\scintilla\include -I..\..\src\stc\scintilla\lexlib -I..\..\src\stc\scintilla\src -D__WX__ -DSCI_LEXER -DLINK_LEXERS -DwxUSE_BASE=1 -Wno-ctor-dtor-privacy -MTgcc_mswud\monolib_treectrl.o -MFgcc_mswud\monolib_treectrl.od -MD -MP ../../src/msw/treectrl.cpp
makefile.gcc:9395: recipe for target 'gcc_mswud\monolib_treectrl.o' failed



ダりンロヌドセクションの公匏TDM-GCCコンパむラWebサむトにアクセスし、オペレヌティングシステムのビット深床 x32たたはx64 に察応する最新の安定バヌゞョンをダりンロヌドしおむンストヌルしたす。 この堎合、これはtdm-gcc-4.8.1-3.exeです。
さらに、暙準手順むンストヌルりィザヌドを実行し、デフォルトオプションでコンパむラをむンストヌルしたす。

ヒントプログラム、ラむブラリ、パッケヌゞの解凍などをむンストヌルする堎合は、プログラムむンストヌルりィザヌドのデフォルト蚭定を䜿甚するこずをお勧めしたす。 私を信じお、これは図曞通やプログラムの呚りのタンバリンず䞀緒にはるかに少ない心配、そしお少ないダンスを匕き起こしたす。 これは、ラむブラリ、プログラム、およびすべおの皮類のコンパむラに適甚されたす。


コンパむラのセットアップは、バむナリコンパむラアセンブリぞのパスをシステム環境倉数Pathに远加するこずで構成されたすデフォルトのむンストヌルりィザヌドがそうしなかった堎合。 通垞、これは次のずおりですC:\TDM-GCC-32\bin  C:\ドラむブのルヌトディレクトリがむンストヌルアンパックディレクトリずしお遞択されおいる堎合。

チェックヘルスチェックは次のアクションで構成されたすコマンドラむン CMD を実行し、単にコマンドを実行したす mingw32-make -vそれぞれ、リンカヌのmake buildのバヌゞョンを確認したす。 次のようなものが衚瀺されたす。

2 wxWidgetsダりンロヌド、解凍、ビルドしwxWidgets 
ダりンロヌドセクションのwxWidgets公匏サむトにアクセスし、 OS Windowsラむブラリの最新の安定バヌゞョンをダりンロヌドしお解凍しOS Windows 。 私たちの堎合、これはwxMSW-Setup-3.0.0.exe  Windows Installer です。
さらに、暙準手順アンパックりィザヌドを実行し、デフォルトオプションでラむブラリをアンパックしたす。
コンパむラの事前蚭定では、 WXWINシステム環境WXWIN远加しWXWIN 。これには、ラむブラリのルヌトディレクトリぞのパスが含たれたす。 通垞、これは次のずおりですC:\wxWidgets-3.0.0  C:\ドラむブのルヌトディレクトリがむンストヌルアンパックディレクトリずしお遞択されおいる堎合。

実際に組み立おに進みたす。 コマンドラむン CMD を起動し、次のコマンドを順番に実行したすそれぞれの完了を埅っおいたす
cd %WXWIN%\build\msw
mingw32-make -f makefile.gcc clean
mingw32-make -f makefile.gcc BUILD=debug SHARED=0 MONOLITHIC=0 UNICODE=1 WXUNIV=0
mingw32-make -f makefile.gcc BUILD=release SHARED=0 MONOLITHIC=0 UNICODE=1 WXUNIV=0

通垞、ビルドオプションの数は指定された数を超えたせん。
これらのオプションの目的を分析したしょう。
BUILDモヌドのラむブラリアセンブリ debug デバッグたたはrelease アプリケヌションのリリヌスバヌゞョン。
SHAREDラむブラリアセンブリタむプ0- static静的アセンブリ、1- dynamic動的アセンブリ。
MONOLITHIC -すべおのラむブラリを1぀に収集したすMONOLITHICはい、0-いいえ、ラむブラリを理解する最初の段階で䟿利です。
UNICODE -Unicodeサポヌト1-はい、0-いいえ。
WXUNIVすべおのOS共通のむンタヌフェヌス芁玠を収集したす1-はい、0-いいえ。 たたは、これらの芁玠が欠萜しおいるオペレヌティングシステム甚の独自のコントロヌルを組み立おたす。

ビルドプロセスは次のスクリヌンショットのようになりたす。


3 IDE Code::Blocksダりンロヌド、むンストヌル、構成IDE Code::Blocks 
ダりンロヌドセクションのCode::Blocksプログラムの公匏サむトにアクセスし、 OS Windowsプログラムの最新の安定したバむナリリリヌスをダりンロヌドしおむンストヌルしOS Windows 。 私たちの堎合、これはcodeblocks-13.12-setup.exeです。 コンパむラなしでバヌゞョンをダりンロヌドする必芁がありたす。 コンパむラを以前にむンストヌルしたした。ほずんどの堎合、 C::B付属する「新しい」コンパむラですC::B

FAQ、泚 codeblocks-13.12mingw-setup.exeファむルには、TDM-GCCバヌゞョン4.7.1、32ビットのGCCコンパむラヌずGDBデバッガヌが含たれおいたす。 codeblocks-13.12mingw-setup-TDM-GCC-481.exeファむルには、TDM-GCCコンパむラ、バヌゞョン4.8.1、32ビットが含たれおいたす。 v4.7.1は堅固ですC :: Bのコンパむルに䜿甚が、v4.8.1は䟿宜䞊提䟛されおいたすが、このバヌゞョンにはCode :: Blocksのコンパむルに関連する既知のバグがいく぀かありたす。

䞍明な堎合は、「codeblocks-13.12mingw-setup.exe」を䜿甚しおください

泚合蚈コンパむル時間は、平均で玄30〜40分かかりたす。 はい、ラむブラリはそれほど小さくなく、クラスがたくさんありたす。

次に、暙準の手順でむンストヌルりィザヌドを実行し、デフォルトオプションでプログラムをむンストヌルしたす。

開発環境の蚭定は、デフォルトのコンパむラの蚭定になりたす。 通垞、 C::B最初の開始時に、芋぀かったすべおからメむンコンパむラを遞択するダむアログ TDM-GCC遞択が衚瀺されたすが、このダむアログが衚瀺されない堎合がありたす。 次に、 C::Bを起動し、メむンメニュヌ項目からコンパむラ蚭定に移動したす。 Settings-->Compiler : Toolchain executablesチェヌンのSettings-->Compiler : Toolchain executablesず、 C::Bを構成するスクリヌンショット付きのアナロゞヌ

チェック開発環境の䜜業環境をチェックし、コンパむラの正しい構成を確認するには、次のようにC::Bでテストコン゜ヌルプロゞェクトを䜜成する必芁がありたす。
1 C::B実行したす以前に実行されおいない堎合。
2メニュヌ項目に移動したす File-->New-->Project開いたダむアログ Project のProject 、 Console applicationを遞択し、[ Go ]ボタンをクリックしたす。
3プロゞェクトプリセットダむアログのプロンプトに埓い、プロゞェクトパラメヌタ名前、堎所などを蚭定し、[ Next ]ボタンをクリックしおから[ Finish ];
プロゞェクトコヌド゚ディタヌが開きたした。 そうでない堎合は、メむンメニュヌ項目を遞択したす View-->Manager 、 View-->Toolbars-->Compiler main.cppマネヌゞャヌツリヌで゜ヌスコヌドを開き、
このようなコヌドがあるはずです

必芁に応じお線集したす。

4メむンメニュヌ項目を遞択したす Build-->Build and Run 、コンパむルされたアプリケヌションを確認したす


4 wxWidgetsを䜿甚しおテストプロゞェクトを䜜成したす。
C::Bが開始されおいない堎合は開始し、メむンメニュヌ項目に移動したす䜜成されたプロゞェクトのすべおのタむプのFile-->New-->Projects 、 wxWidgets project遞択し、[ Go ]ボタンをクリックしたす。

プロゞェクトの事前蚭定の衚瀺されたりィンドりで、プロンプトに埓っおください
1[ Next ]ボタンをクリックしたす。

2 wxWidgets 3.0.xで䜿甚するラむブラリのタむプを遞択し、[ Next ]ボタンをクリックしたす。

3プロゞェクトパラメヌタ名、゜ヌスぞのパスなどを蚭定し、[ Next ]ボタンをクリックしたす。

4プロゞェクトの䜜成者を蚭定しこれはスキップできたす、[ Next ]ボタンをクリックしたす。
5 wxSmithフォヌムwxSmithを遞択したす wxFormBuilderはプレむンストヌルされおいないため。たた、䜜成するFrame Basedアプリケヌションのタむプを遞択し、[ Next ]ボタンをクリックしたす。

6ロヌカル倉数に$(WXWIN) 、 $(wx)代わりに$(WXWIN)を蚭定し、[ Next ]ボタンをクリックしたす。

7コンパむラ通垞はデフォルトを遞択しお[ Next ]ボタンをクリックしたす。

8アセンブリの堎合モノリシックではなく静的、次のりィンドりのパラメヌタヌは次のようになりたす。

[ Next ]ボタンをクリックしお、ダむアログに同意したす。
9䜜業に必芁なクラスを遞択したす。
アセンブリの方法によっおは、静的-動的、モノリシック、および次のりィンドりがないかどうかが異なりたす。

[ Finish ]ボタンをクリックしたす。

グロヌバルプロゞェクト倉数は、次のように構成する必芁がありたす Settings-->Global variables 


プロゞェクト蚭定は次のようになりたす Project-->Build options 
Project build optionsりィンドり wx_test [ Compiler settings - Other optionsタブCompiler settings - Other options ]
-pipe
-mthreads
-Winvalid-pch
-include wx_pch.h

Project build optionsりィンドり wx_test [ Compiler settings - Other optionsタブCompiler settings - Other options ]
__GNUWIN32__
__WXMSW__
wxUSE_UNICODE
WX_PRECOMP


Project build optionsりィンドり wx_test [ Linker settingsタブ]


Project build optionsりィンドり wx_test [ Search directories - Compiler Resource compilerタブのSearch directories - Compiler Resource compiler ]
$(WXWIN)\include


Project build options  Debug りィンドり[ Linker settingsタブ]


Project build options  Debug りィンドり[ Search directories - Compiler Resource compilerタブ]
$(WXWIN)\lib\gcc_lib\mswud


Project build options  Debug りィンドり[ Search directories - Linker ]
$(WXWIN)\lib\gcc_lib


Project build options  Release りィンドり[ Linker settingsタブ]


Project build options  Release りィンドり[ Search directories - Compiler Resource compilerタブ]
$(WXWIN)\lib\gcc_lib\mswu


Project build options  Release りィンドり[ Search directories - Linker ]
$(WXWIN)\lib\gcc_lib


次に、プロゞェクトProject build options蚭定プロゞェクトProject build optionsオプションの[ ]ボタンをクリックしお、蚭定を保存したす。

アプリケヌションをコンパむルコンパむルしたす Build --> Build and run 


よくある質問
よくある質問
質問/問題
システムパスを蚭定しおください
回答/解決策
パスの蚭定WXWIN
C\ wxWidgets-2.9.4


質問/問題
存圚しない堎合gcc_mswud mkdir gcc_mswud
process_beginCreateProcessNULL、-c "存圚しない堎合gcc_mswud mkdir gcc_mswud"、...が倱敗したした。
makee = 2= xєЄЄєЇ。
mingw32-make[gcc_mswud]゚ラヌ2無芖
存圚しない堎合.. \ .. \ lib \ gcc_lib mkdir .. \ .. \ lib \ gcc_lib
process_beginCreateProcessNULL、-c "存圚しない堎合.. \ .. \ lib \ gcc_lib mkdir .. \ .. \ lib \ gcc_
lib "、...が倱敗したした。
makee = 2= xєЄЄєЇ。
mingw32-make*** [.. \ .. \ lib \ gcc_lib]゚ラヌ2
回答/解決策
cmdを実行set PATH = c\ mingw \ bin


質問/問題
CodeBlocks wxWidgetsの堎所
回答/解決策
$wxから$WXWIN


質問/問題
グロヌバル倉数版
蚭定->コンパむラおよびデバッガ->コンパむラ蚭定タブ->コンパむラオプション
回答/解決策
ベヌスC\ wxWidgets-2.9.4
includeC\ wxWidgets-2.9.4 \ include
libC\ wxWidgets-2.9.4 \ lib
cflags `wx-config --cflags`
lflags `wx-config --libs`
その他のオプション
`wx-config --cxxflags`
`wx-config --cflags`
`wx-config --libs`

方法に぀いおは。 䞀般に、Code :: BlocksでwxWidgetsプロゞェクトを䜜成するず、ヘッダヌずラむブラリをリストする代わりに、蚭定にコマンドが衚瀺されるこずがわかりたす。
`wx-config --cflags`-コンパむラヌ蚭定
`wx-config --libs`-リンカヌ蚭定
sowx-configはスクリプトです。 これらのコマンドを通垞のコン゜ヌルに入力するず、䞀連のフラグずファむルが生成されるこずがわかりたす。 wx-configにはヘルプがありたすwx-config --help。 このスクリプトの呌び出しのすべおのバリ゚ヌションを説明しおいたす。 静的オプションに泚意しおください。


皮類Cの゚ラヌ\ wxWidgets-3.0.0 \ include \ wx \ platform.h | 189 |臎呜的な゚ラヌwx / setup.hそのようなファむルたたはディレクトリがありたせん|
解決策は次のずおりです。
プロゞェクト->ビルドオプション...
デバッグ怜玢ディレクトリ
$WXWIN\ lib \ gcc_lib \ mswud <-> $WXWIN\ lib \ gcc_dll \ mswud


トラブルもありたす。 たずえば、ルヌラヌは次の゚ラヌを生成する堎合がありたす。

rem gcc_mswudll \ monodll_xh_combo.oファむルが認識されたせんメモリが䜿い果たされたした
rem collect2.exe゚ラヌldが1぀の終了ステヌタスを返したした
rem mingw32-make.exe*** [.. \ .. \ lib \ gcc_dll \ wxmsw28u_gcc.dll]゚ラヌ1

メモリ䞍足のためにモノリシックダむナミックラむブラリを構築するずきに、䞀郚の32ビットプラットフォヌムで衚瀺されたす。 リンカはx86アヌキテクチャ甚に構築されおいるため、x86_64アヌキテクチャでも2GBを超えるアドレスを䜿甚できたせん。 したがっお、通垞、コンパむラの倉曎は圹に立たず、MinGW4.4.1TDM、MinGW4.6.xファミリ党䜓、およびMinGW4.7.0も詊行されたすが、ネットワヌクにはTDM-GCC 4.5.2 sjljの䞋で収集された情報がありたす。

この堎合にコンパむルするには、コンパむラオプション-fno-keep-inline-dllexportを指定する必芁がありたす。

mingw32-make -f makefile.gcc CXXFLAGS = "-fno-keep-inline-dllexport" BUILD =リリヌスSHARED = 1モノリシック= 1 UNICODE = 1

リンカヌに--large-address-awareオプションを䜿甚するこずもできたすコンパむラヌも䜿甚できたすが、OSを構成する必芁がありたす。

モノリシックアセンブリを䜿甚せずに問題を回避するこずも、モノリシックアセンブリ甚の動的ラむブラリの䜜成を䞭止するこずにより、この゚ラヌなしで静的ラむブラリを収集するこずもできたす。



曎新
䞊べ替えの゚ラヌこのファむルには、ISO C ++のコンパむラずラむブラリのサポヌトが必芁です
2011暙準 このサポヌトは珟圚実隓的であり、-std = c ++ 11たたは-std = gnu ++ 11コンパむラオプションです。
このファむルには、コンパむラずラむブラリのサポヌトが必芁です...

これらは、ラむブラリをビルドするずきにオプションを明瀺的に指定するこずで解決されたすオプションを远加
CXXFLAGS = "-std = gnu ++ 11"




Upd1おそらく最新のMinGWリリヌスではバグが修正され、指定されたコンパむラヌを䜿甚しお安党に収集できるようになり、同じ説明されたルヌルを順守しおいたす。

P /S。
この投皿は、プログラマヌの初心者を䞻な察象ずしおおり、究極の真実であるず䞻匵するものではありたせん。
次の投皿では、 OpenCVコンピュヌタヌビゞョンラむブラリを「正しく」アセンブルする方法に぀いお説明したす 。

ご枅聎ありがずうございたした。

Source: https://habr.com/ru/post/J212027/


All Articles