wxWidgetsを使用するときに、.libファイルを大量にリンクしなければならない。この問題を解決するために、無数にある.libファイルを一つのファイルにまとめてしまうことができる。
まず、以下のようにmulti-lib/ フォルダ内にwxWidgetsの.libファイルが入っているとする。
D:. └─multi-lib/ wxbase33u.lib wxbase33u_net.lib wxbase33u_xml.lib wxexpat.lib wxjpeg.lib wxlexilla.lib wxmsw33u_adv.lib wxmsw33u_aui.lib wxmsw33u_core.lib wxmsw33u_gl.lib wxmsw33u_html.lib wxmsw33u_media.lib wxmsw33u_propgrid.lib wxmsw33u_qa.lib wxmsw33u_ribbon.lib wxmsw33u_richtext.lib wxmsw33u_stc.lib wxmsw33u_webview.lib wxmsw33u_xrc.lib wxpng.lib wxregexu.lib wxscintilla.lib wxtiff.lib wxzlib.lib
複数のライブラリを一つにまとめるには、lib.exeを使用する。
lib.exe /OUT:纏めたファイル名.lib ライブラリ1.lib ライブラリ2.lib
まず、 x64 Native Tools Command Prompt for VS 2022 を開いて、Visual Studioのツールを使えるようにする。
そして、以下のように入力してcombined_wx.libを作成する。カレントディレクトリに出力されるので、この例だとmulti-lib/combined_wx.libが作成される。
特に注意するところはない。普通に使用できる。
// プリプロセッサに以下を追加 // __WXMSW__ // static link library の場合、以下は指定しない // WXUSINGDLL // サブシステムをWindowsに設定(WinMainで呼び出すので) // Windows (/SUBSYSTEM:WINDOWS) #ifndef WX_PRECOMP #include <wx/wx.h> #endif #include <wx/gdicmn.h> // wxPointに必要 #include <wx/frame.h> // wxFrameに必要 // Win32 API #pragma comment(lib, "comctl32.lib") #pragma comment(lib, "rpcrt4.lib") #if 1 // 一つに纏めた.libファイル群 #pragma comment(lib,"combined_wx.lib") #else // 本来使用する.libファイル群 #pragma comment(lib,"wxmsw33u_core.lib") #pragma comment(lib,"wxbase33u.lib") #pragma comment(lib,"wxbase33u_net.lib") #pragma comment(lib,"wxbase33u_xml.lib") #pragma comment(lib,"wxexpat.lib") #pragma comment(lib,"wxjpeg.lib") #pragma comment(lib,"wxlexilla.lib") #pragma comment(lib,"wxmsw33u_adv.lib") #pragma comment(lib,"wxmsw33u_aui.lib") #pragma comment(lib,"wxmsw33u_gl.lib") #pragma comment(lib,"wxmsw33u_html.lib") #pragma comment(lib,"wxmsw33u_media.lib") #pragma comment(lib,"wxmsw33u_propgrid.lib") #pragma comment(lib,"wxmsw33u_qa.lib") #pragma comment(lib,"wxmsw33u_ribbon.lib") #pragma comment(lib,"wxmsw33u_richtext.lib") #pragma comment(lib,"wxmsw33u_stc.lib") #pragma comment(lib,"wxmsw33u_webview.lib") #pragma comment(lib,"wxmsw33u_xrc.lib") #pragma comment(lib,"wxpng.lib") #pragma comment(lib,"wxregexu.lib") #pragma comment(lib,"wxscintilla.lib") #pragma comment(lib,"wxtiff.lib") #pragma comment(lib,"wxzlib.lib") #endif ///////////////////////////////////// ///////////////////////////////////// ///////////////////////////////////// // ウィンドウ作成 class MyFrame : public wxFrame { public: MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) : wxFrame(NULL, wxID_ANY, title, pos, size) { } private: // イベント処理しないときはこれを入れない // wxDECLARE_EVENT_TABLE(); }; ///////////////////////////////////// ///////////////////////////////////// ///////////////////////////////////// // wxWidgetsのアプリケーション作成 class MyApp : public wxApp { public: virtual bool OnInit() { MyFrame* frame = new MyFrame("Hello World", wxPoint(50, 50), wxSize(450, 340)); frame->Show(true); return true; } }; ///////////////////////////////////// ///////////////////////////////////// ///////////////////////////////////// // WinMainをマクロで定義 wxIMPLEMENT_APP(MyApp);