スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【同じタグを付けた記事の一覧】

Code::Blocks をポータブルに使う(wxWidgets 編)

2016年05月31日(火)23時58分

環境構築

wxWidgets を(Code::Blocks で)使う」という目的のため、これまで長々と下記のような環境構築を続けてきました。

  1. Code::Blocks をポータブルに使う(セットアップ編)
  2. Code::Blocks をポータブルに使う(MinGW32 編)
  3. Code::Blocks をポータブルに使う(MinGW64 編)
  4. wxWidgets 3.1.0 を MinGW でビルド

今回はいよいよ当初の目的であった wxWidgets プロジェクトの作成作業を行います。
その他の作業については「CodeBlocks」タグから一覧可能です。

グローバル変数の設定

まずはじめに、wxWidgets プロジェクトを生成する際に Code::Blocks が参照する wxWidgets の位置情報をグローバル変数として設定しておきます。
Code::Blocks のメニューから「設定 → グローバル変数」で設定画面を呼び出し、「現在の変数」行の「新規」ボタンで新しい変数「wx」を作ります。
作成した「wx」の「base」には「$(CodeBlocks)\Libraries\wxWidgets」と、Code::Blocks の位置を起点とした wxWidgets の格納場所を記載しておきます。

グローバル変数wx

が、実はこの「wx」は今回構築している環境下では使用しません。
ただ Code::Blocks のウィザードが「wx」を標準値として使用し、無ければ強制的に作成させられるために作っておくだけです。
ということで、本命のグローバル変数である下記の二つを上記と同様の手順で作成します。

  1. 「変数名 → wxmingw32」「base → $(CodeBlocks)\Libraries\wxWidgets\MinGW\32」
  2. 「変数名 → wxmingw64」「base → $(CodeBlocks)\Libraries\wxWidgets\MinGW\64」

グローバル変数wxmingw32

ちなみに、Code::Blocks wxWidgets プロジェクトウィザードが使用するのは「base」のみですので、「include」や「lib」の設定は不要です。
むしろせっかく設定しても使用してもらえないため、前回「wxWidgets 3.1.0 を MinGW でビルド」において、「include」フォルダを「lib」フォルダと同じ位置にコピーしていない場合、この「include」欄に「$(CodeBlocks)\Libraries\wxWidgets\include」を記載しておき、プロジェクト生成後に手作業で参照位置を書き換える必要があります。

グローバル変数wxmingw64

wxWidgets project

前準備はこれで終わりましたので、ウィザードで雛形となる基本的な wxWidgets プロジェクトを生成してみます。
まずはメニューの「ファイル → 新規 → プロジェクト」で「wxWidgets project」を「Go」です。

テンプレートから新規作成

確認画面は特に何度も見る理由はないと思われますので、「このページを次回スキップ」にチェックして「次へ」。

Welcome to the new wxWidgets project wizard!

使用する wxWidgets のバージョンですが、Code::Blocks 16.01 ではまだ「wxWidgets 3.1.x」が存在しませんので、とりあえず「wxWidgets 3.0.x」を選んでおきます。

Please select the wxWidgets version you want to use.

「プロジェクトタイトル」は「Test_wxMinGW64」としました。
つまり今回は64ビット版で作ります。

新しいプロジェクトのタイトルを入力してください。

作者情報は別になくても生成可能であるため、とりあえずなにも設定せずに「次へ」。

Please Enter Project Details.

今回は GUI ビルダーの類は使わないため「Preferred GUI Builder」は「なし」にします。
「Application Type」はダイアログ形式ではなく「Frame Based」にしてみました。

Please select your favourite GUI Builder to use.

次のこの質問で事前に準備したグローバル変数を使用します。
今回は64ビット版を作る予定であるため「$(#wxmingw64)」を指定し「次へ」。

Please select the location of wxWidgets on your computer.

「コンパイラー:」は64ビット版を作るので「GNU GCC Compiler 64」にします。

Please select the compiler to use and which configurations you want enabled in your project.

使用する wxWidgets の形式ですが、一つの EXE ファイルのみで実行できるのが好みであるため、今回は静的リンク版にします。
そのため「Use wxWidgets DLL」は非チェックです。
前回「wxWidgets 3.1.0 を MinGW でビルド」で静的リンク版は MONOLITHIC でビルドしているため「wxWidgets is build as a monolithic library」をチェックします。
また、Unicode 版でビルドしているため「Enable unicode」もチェックです。
ついでに、さらに細かい設定もあるようなので「Configure Advanced Options」にもチェックを入れておきます。

Please select various configuration options.

Warning

ここで以下のような内容の Warning が出ます。

A matching Debug configuration cannot be found in the wxWidgets directory you specified.

This means that Debug target of your project will not build.

Are you sure you want to continue with these settings?

A matching Debug configuration cannot be found in the wxWidgets directory you specified.

これは wxWidgets のデバッグ版をビルドしていないにもかかわらず、一つ前の質問で「"Debug"設定を作成」にチェックを入れていた場合にも出ます。
が、今回はそうではなく Code::Blocks 16.01 ではまだ対応していない「wxWidgets 3.1.x」を使用していることが原因です。
つまり Code::Blocks のウィザードは「3.0.x」用の LIB ファイルである「libwxmsw30ud.a」をリンクするファイルとして設定するのですが、「3.1.x」ではこれが「libwxmsw31ud.a」となっており、そのため指定された wxWidgets フォルダに必要なファイルがないとしてこの警告が出るわけです。
これは後で設定を変更することで対処するため、ここは「はい」で進めます。
もう一つ、上記の「Debug」が「Release」に変わっただけの Warning も出ますが、これも理由は同じであるため「はい」です。

A matching Release configuration cannot be found in the wxWidgets directory you specified.

最後に「Advanced options」ですが、せっかくの GCC で、かつ wxWidgets のデバッグ版も作っているのだから、ということで「Use _WXDEBUG_ and Debug wxWidgets lib」をチェックしました。
が、これになんの意味があるのかわからないので、もしかしたらしない方がいいのかもしれません。
また、作るのは GUI アプリケーションですので「GUI Mode Application」に変更し「完了」します。

Please select advanced options.

Hello Code::Blocks user!

とりあえずプロジェクトはできましたが、ビルド前にまず途中で出た Warning の対策をしておきます。
メニューの「プロジェクト → ビルドオプション」で「Debug → リンカ設定 → リンクするライブラリ」にある「libwxmsw30ud.a」を「編集」して「libwxmsw31ud.a」に変更します。

libwxmsw31ud.a

同様に「Release」の「libwxmsw30u.a」も「libwxmsw31u.a」に変えます。

libwxmsw31u.a

また、もし前回「wxWidgets 3.1.0 を MinGW でビルド」において、「include」フォルダを「lib」フォルダと同じ位置にコピーしていない場合、「プロジェクト → ビルドオプション → ディレクトリーの検索」タブの「コンパイラー」および「リソースコンパイラー」に「$(#wxmingw64.include)」を追加(または既に設定されている「$(#wxmingw64)\include」を上書き)する必要があります。

ディレクトリーの検索コンパイラーディレクトリーの検索リソースコンパイラー

ということで「ビルド → ビルドして実行」してみますと、以下の関数が「undefined reference to」と言われてエラーになります。

  • GetFileVersionInfoSizeW(GetFileVersionInfoSize)
  • GetFileVersionInfoW(GetFileVersionInfo)
  • VerQueryValueW(VerQueryValue)

また、以下の関数も「undefined reference to」です。

  • __imp_SHAutoComplete(SHAutoComplete)
  • __imp_AssocQueryStringW(AssocQueryString)

調べてみると前者は「libversion.a」、後者は「libshlwapi.a」に含まれていることがわかりましたので、この二つを「プロジェクト → ビルドオプション → リンカ設定 → リンクするライブラリ」に追加しました。
これも Code::Blocks が現時点(16.01)ではまだ「3.1.x」に対応していないことに要因があると思われます。

libversion.aとlibshlwapi.aを追加

これで再度「ビルド → ビルドして実行」してみたところ、めでたくウインドウが表示されました。

wxWidgets Application Template

ここで生成された「Test_wxMinGW64.exe」は静的リンクされていますので、wxWidgets が存在しない環境下でも EXE ファイル単体で実行可能です。
さらに GCC のリンカーオプションとして「-static-libgcc」「-static-libstdc++」も指定しておけば、完全に単体で実行可能なバイナリになります。
ちなみに、生成された EXE ファイルのサイズは Debug 版が 131MB で Release版が 7MB 程度でした。

関連記事

【同じタグを付けた記事の一覧】
プログラミング ポータブル C++ CodeBlocks wxWidgets

スポンサーサイト

コメントの投稿

非公開コメント

初めての

始めましてこんばんは
事情があってcodeblock16.01にwxwidgets2.8.12を入れようとしていて色々検索して漸くここでの内容で初回コンパイル成功まで辿り着きましたありがとうございます。
codeblockは日本語情報が有る様で余り無いので助かりました。
必要なファイルは掻き集めるだけでソースからコンパイルというカッコいい事は出来ませんでしたがそれでも大変でした。
環境構築というのは何と言うか私は勘が働かないタイプなのでなかなか上手く行く事が無くて諦める事が多いのですが、他様サイトの内容なども合わせて漸く出来た感じです、インターネットのパワーという物を感じます。
どうもさんでした

Re: 初めての

はじめまして、辿り着いた人さん。
お役に立てたようで何よりです。
wxWidgetsもCode::Blocksも日本語情報が少ないですよね。
でも自分自身、これまでインターネットからたくさんの力をいただいてきましたので、
少しでも恩返しできたらと、つたない経験をまとめた甲斐があってよかったです。
それでは。
最新記事
最新コメント
Amazonおまかせリンク
カテゴリ
タグクラウド
Amazonお買い得ウィジェット
カレンダー
05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
月別アーカイブ
プロフィール

電脳太助

Author:電脳太助
Website:電脳スピーチ web

RSSリンクの表示
メールフォーム

名前:
メール:
件名:
本文:

サイト内検索
Ads by Google
FC2アクセスランキング
Ads by Google
FC2拍手ランキング
ユーザータグ

音楽管理(66)
ポータブル(57)
ソフト紹介(44)
プログラミング(42)
音声技術(41)
自作ソフト(35)
サイト運営(32)
FC2(31)
ブログ(30)
iTunes(27)
Windows(25)
LISMO(24)
音声合成(23)
音声認識(22)
x-アプリ(22)
電子ブック(22)
eラーニング(20)
バックアップ(19)
語学学習(19)
foobar2000(18)
ソースコード(18)
WindowsLiveWriter(15)
画像管理(15)
C++(14)
アフィリエイト(10)
DnspTools(10)
fi-6130(9)
FLAC(9)
JavaScript(9)
ウォークマン(9)
英語音読学習計画(8)
Gracenote(8)
Prolog(8)
ベクター(8)
雑記(8)
CodeBlocks(7)
SyntaxHighlighter(7)
TraConv(7)
spcbght(7)
wxWidgets(7)
VirtualBox(6)
W63CA(6)
DCP-J552N(6)
WinRT(6)
WindowsLiveMesh(6)
iGoinLM(6)
英語発音矯正実験(6)
ExactAudioCopy(6)
MP3Gain(6)
LAME(5)
音楽技術(5)
Mery(5)
楽器演奏(5)
GalateaTalk(4)
nLite(4)
WindowsLiveSkyDrive(4)
ホームページ(4)
GalateaProject(4)
MIDI(4)
LLVM(4)
PC-98(3)
カウンター(3)
AACGain(3)
iTCDini(3)
OverCutChecker(3)
拍手(3)
PK-513L(3)
UniversalExtractor(3)
アクセスランキング(3)
ImageCompositeEditor(2)
アクセス解析(2)
OCR(2)
qtaacenc(2)
資格試験(1)
AquesTalk(1)
AquesCmdDl(1)

FC2アクセスランキング
最新トラックバック
アクセスランキング
[ジャンルランキング]
コンピュータ
106位
アクセスランキングを見る>>

[サブジャンルランキング]
ソフトウェア
11位
アクセスランキングを見る>>
FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。