投稿

2月, 2017の投稿を表示しています

win64アプリケーションクロスビルドでアイコン・プロパティ・リソースを付ける

イメージ
Gtk3/Cで書いたベクターグラフィック・エディタのvecterionを、Ubuntu16.04ホストでwin64ターゲットにクロスビルド中。でアイコン・プロパティ・リソースを付けた作業のメモです。


以下のようなコードで実現できます。

# .rcほか、リソースファイルを用意する  実際に必要なのは```IDI_ICON ICON ~```行だけです。
そのICONこれも実は文字列"ICON"とファイルパス以外は大した意味はないとか、他にもオプションが付けられるとかあるようです。
Win32アプリケーションプログラミングをマスターしたいわけではないので.rcファイルの記述はスルー。
.icoファイルですが、GIMPでいい加減に縮小するだけならいい加減に作れます。PNG透過の正方形画像を、512px, 64px,32px,16pxの順にレイヤ複製->レイヤ縮小を繰り返して、最後に.icoで保存しようとすると、アイコン形式画像を保存するウィザードが出てきてGIMPが良いようにしてくれます。
(64pxは48pxのほうがいいかもしれないけれどしていません。512pxもMacOSX対応にしては中途半端。)


Ubuntu16.04環境ではnautilusもeogもこの.icoを正しく描画できませんでしたが、Windowsではとしてはきちんとアプリケーションアイコンとして表示されたので問題ありません。

```
diff --git a/deploy/win/vecterion.rc b/deploy/win/vecterion.rc
new file mode 100644
index 0000000..ed229c3
--- /dev/null
+++ b/deploy/win/vecterion.rc
@@ -0,0 +1,24 @@
+#include <windows.h>
+
+//ICON
+IDI_ICON1 ICON DISCARDABLE "deploy/win/vecterion_icon.ico"
+
+1 VERSIONINFO
+FILEVERSION     0,0,0,1
+PRODUCTVERSION  0,0,0,1
+BEGIN
+    BLOCK "StringFileInfo"
+    BE…

gtk3アプリケーションのクロスビルド(Windowsターゲット、Linuxホスト)した際のメモ

イメージ
開発中のGtk3/Cによるベクターグラフィック・エディタであるvecterionの、Windowsx64ターゲット、Linuxホストでクロスビルド作業中。
とりあえず動作するところまでは行きました。



その時のトライアンドエラーというか問題と解決のざっとしたメモです。


Windowsターゲットビルドはvecterionにとってあくまでおまけなのだけれど、Linuxターゲットで開発していてコード中に甘かった箇所がいくつかあり(ex. フォーマット文字列中のsize_tの変換指定を%zuにしていなかったなど)、ついでに修正することができた。


原因を追い切ってはいません。Windows版の優先度はその程度です。

#### 解決方法をメモし忘れたエラー error: unknown type name ‘uid_t’
詳細を忘れてしまった。
確かMinGW64のWindowsターゲットクロスビルドであるにも関わらず、pkg-configがLinuxのライブラリをリンクして、起こっていたような気がする。
http://stackoverflow.com/questions/32282270/c99-error-unknown-type-name-pid-t


```
In file included from /usr/lib/x86_64-linux-gnu/glib-2.0/include/glibconfig.h:9:0,
                 from /usr/include/glib-2.0/glib/gtypes.h:32,
                 from /usr/include/glib-2.0/glib/galloca.h:32,
                 from /usr/include/glib-2.0/glib.h:30,
                 from /usr/include/gtk-3.0/gdk/gdkconfig.h:13,
                 from /usr/include/gtk-3.0/gdk/gdk.h:30,
                 from /usr/include/gtk-3.0/gtk/gtk.h:30,
                 from ./include/et_poin…