スポンサーリンク

wxWidgetsをstatic link libraryとしてビルドする

wxWidgetsを使用した場合の問題の一つが、配布時に同梱するDLLの数が増えることで、これを解決するためにwxWidgetsをStatic Link Libraryとしてビルドしてexeとくっつけてしまうことで、DLLの同梱を不要にする。

CMake

ダウンロード

まずソースコードをダウンロードするが、zipでは依存関係が多くて面倒なので、git clone --recursiveで依存関係も含め一括でダウンロードする。

git clone --recursive https://github.com/wxWidgets/wxWidgets.git

cmake

CMakeでは、wxBUILD_SHAREDを検索し、このチェックを外す

ALL_BUILDをビルドし、INSTALLする。

使用方法

基本的な使い方はShared Libraryの時と同じだが、何点か注意点がある。

VC++でwxWidgetsを試す(1)

注意点

・WXUSINGDLL を指定しない

プリプロセッサにWXUSINGDLLを指定しない。指定してしまうとLNK2001が大量発生する

・windowsのlibファイルのリンクを追加

comctl32.lib , rpcrt4.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")

// wxWidgets
#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")


/////////////////////////////////////
/////////////////////////////////////
/////////////////////////////////////

// ウィンドウ作成
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);

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: