« PCMデータを確認する | トップページ | 音がでないなぁ その2 »

2014年3月26日 (水)

配布方法を考える

#まだ音も出ていないのですが、ちょっと現実逃避。

Windowsでのバイナリ配布について調べてみます。

フリーのインストーラー作成ツールは、googleさんで検索すると…

「EXEpress CX 5」フリー版

最近アップデートされているので、メンテナンスは問題なさそうです。CABからEXEファイルを作成します。

「簡単インストーラ」

このツールも年末にアップデートされてます。

これらのツールがあるので、とりあえずなんとかなりそうです。

で、次に考えなければならないのが、配布用のファイルの準備です。さすがにQt-Projectの配布しているSDKを入れてくださいというのはまずそうです。500MBをダウンロードして、インストールすることに抵抗ありますよね、普通。

ということで、一番良いのはQtの関連ファイルを全くインストールすることなく使えることでしょう。

現在MinGW+Qt5で開発しているQt Brynhildr(仮称)は、MinGWとQt5の多くのダイナミックリンクライブラリに依存しています。

lddコマンドでリリース用実行ファイルを確認すると以下の様な結果が得られます。
#"???"となっているところはよくわかりません。cygwinのlddコマンドだからかな?

$ ldd release/qtbrynhildr.exe
ntdll.dll => /c/Windows/SYSTEM32/ntdll.dll (0x7ff81ebd0000)
ntdll.dll => /c/Windows/SYSTEM32/ntdll.dll (0x77580000)
wow64.dll => /c/Windows/SYSTEM32/wow64.dll (0x77530000)
wow64win.dll => /c/Windows/system32/wow64win.dll (0x774c0000)
wow64cpu.dll => /c/Windows/system32/wow64cpu.dll (0x774b0000)
??? => ??? (0x2b0000)
KERNEL32.DLL => /c/Windows/SYSTEM32/KERNEL32.DLL (0x77370000)
??? => ??? (0x2b0000)
??? => ??? (0x5a0000)
KERNEL32.DLL => /c/Windows/SYSTEM32/KERNEL32.DLL (0x77370000)
KERNELBASE.dll => /c/Windows/SYSTEM32/KERNELBASE.dll (0x76930000)
apphelp.dll => /c/Windows/system32/apphelp.dll (0x6ef30000)
msvcrt.dll => /c/Windows/SYSTEM32/msvcrt.dll (0x76a00000)
libgcc_s_dw2-1.dll => /c/Tools/develop/Qt/Qt5.2.1/5.2.1/mingw48_32/bin/libgcc_s_dw2-1.dll (0x6e940000)
libstdc++-6.dll => /c/Tools/develop/Qt/Qt5.2.1/5.2.1/mingw48_32/bin/libstdc++-6.dll (0x6fc40000)
Qt5Core.dll => /c/Tools/develop/Qt/Qt5.2.1/5.2.1/mingw48_32/bin/Qt5Core.dll (0x68880000)
Qt5Gui.dll => /c/Tools/develop/Qt/Qt5.2.1/5.2.1/mingw48_32/bin/Qt5Gui.dll (0x61940000)
Qt5Multimedia.dll => /c/Tools/develop/Qt/Qt5.2.1/5.2.1/mingw48_32/bin/Qt5Multimedia.dll (0x6b480000)
Qt5Network.dll => /c/Tools/develop/Qt/Qt5.2.1/5.2.1/mingw48_32/bin/Qt5Network.dll (0x69700000)
Qt5Widgets.dll => /c/Tools/develop/Qt/Qt5.2.1/5.2.1/mingw48_32/bin/Qt5Widgets.dll (0x61dc0000)
libwinpthread-1.dll => /c/Tools/develop/Qt/Qt5.2.1/5.2.1/mingw48_32/bin/libwinpthread-1.dll (0x64940000)
USER32.dll => /c/Windows/SYSTEM32/USER32.dll (0x75210000)
ADVAPI32.dll => /c/Windows/SYSTEM32/ADVAPI32.dll (0x76f30000)
ole32.dll => /c/Windows/SYSTEM32/ole32.dll (0x76e20000)
WS2_32.dll => /c/Windows/SYSTEM32/WS2_32.dll (0x77190000)
icuin51.dll => /c/Tools/develop/Qt/Qt5.2.1/5.2.1/mingw48_32/bin/icuin51.dll (0x71000000)
icuuc51.dll => /c/Tools/develop/Qt/Qt5.2.1/5.2.1/mingw48_32/bin/icuuc51.dll (0x6c280000)
GDI32.dll => /c/Windows/SYSTEM32/GDI32.dll (0x766d0000)
OPENGL32.DLL => /c/Windows/SYSTEM32/OPENGL32.DLL (0x68400000)
OLEAUT32.dll => /c/Windows/SYSTEM32/OLEAUT32.dll (0x765f0000)
WINMM.DLL => /c/Windows/SYSTEM32/WINMM.DLL (0x74eb0000)
CRYPT32.dll => /c/Windows/SYSTEM32/CRYPT32.dll (0x75090000)
DNSAPI.DLL => /c/Windows/SYSTEM32/DNSAPI.DLL (0x6c560000)
SHELL32.DLL => /c/Windows/SYSTEM32/SHELL32.DLL (0x75380000)
sechost.dll => /c/Windows/SYSTEM32/sechost.dll (0x77330000)
RPCRT4.dll => /c/Windows/SYSTEM32/RPCRT4.dll (0x74fd0000)
combase.dll => /c/Windows/SYSTEM32/combase.dll (0x767e0000)
NSI.dll => /c/Windows/SYSTEM32/NSI.dll (0x77320000)
icudt51.dll => /c/Tools/develop/Qt/Qt5.2.1/5.2.1/mingw48_32/bin/icudt51.dll (0x6c9c0000)
GLU32.dll => /c/Windows/SYSTEM32/GLU32.dll (0x4ff90000)
DDRAW.dll => /c/Windows/SYSTEM32/DDRAW.dll (0x5c760000)
WINMMBASE.dll => /c/Windows/SYSTEM32/WINMMBASE.dll (0x74d80000)
MSASN1.dll => /c/Windows/SYSTEM32/MSASN1.dll (0x75360000)
SHLWAPI.dll => /c/Windows/SYSTEM32/SHLWAPI.dll (0x76590000)
SspiCli.dll => /c/Windows/SYSTEM32/SspiCli.dll (0x74fb0000)
DCIMAN32.dll => /c/Windows/SYSTEM32/DCIMAN32.dll (0x64dd0000)
cfgmgr32.dll => /c/Windows/SYSTEM32/cfgmgr32.dll (0x771e0000)
DEVOBJ.dll => /c/Windows/SYSTEM32/DEVOBJ.dll (0x74d60000)
CRYPTBASE.dll => /c/Windows/SYSTEM32/CRYPTBASE.dll (0x74fa0000)
bcryptPrimitives.dll => /c/Windows/SYSTEM32/bcryptPrimitives.dll (0x74f40000)
IMM32.DLL => /c/Windows/system32/IMM32.DLL (0x76ac0000)
MSCTF.dll => /c/Windows/SYSTEM32/MSCTF.dll (0x77220000)
qwindows.dll => /c/Tools/develop/Qt/Qt5.2.1/5.2.1/mingw48_32/plugins/platforms/qwindows.dll (0x6a880000)
kernel.appcore.dll => /c/Windows/SYSTEM32/kernel.appcore.dll (0x74cd0000)
uxtheme.dll => /c/Windows/system32/uxtheme.dll (0x72110000)
dwmapi.dll => /c/Windows/system32/dwmapi.dll (0x716e0000)
qjpeg.dll => /c/Tools/develop/Qt/Qt5.2.1/5.2.1/mingw48_32/plugins/imageformats/qjpeg.dll (0x626c0000)
CRYPTSP.dll => /c/Windows/SYSTEM32/CRYPTSP.dll (0x72240000)
rsaenh.dll => /c/Windows/system32/rsaenh.dll (0x72210000)
bcrypt.dll => /c/Windows/SYSTEM32/bcrypt.dll (0x721f0000)

Qt5.2.1に依存しているところは配布前に解決しておく必要があります。このためには必要なライブラリをスタティックリンクしてしまう方法が考えられます。

googleさんで調べると、Qt-Projectが提供しているページでstatic linkについて説明されていました。

http://qt-project.org/wiki/How-to-build-a-static-Qt-for-Windows-MinGW

なんか「windows-build-qt-static.ps1」とかいうスクリプトがあるそうですね。Power Shellで書かれているそうです。#Power Shellって見たこと無いけど(^_^;

これを使って、なんとかすれば、Qtライブラリの必要のないコマンドができそうです。詳しくはその時になった時に読み倒すことにします。まだ、本体ができていないので…
#当然ですが、スタティックリンクするとコマンドはバカでかくなりますが仕方ありません。

あと少し気になるのは、サービスへの登録とかインストール時にUACが働くのか、などあるのですが、またその時に考えます。(クライアントだけならサービスは関係ありませんが)

« PCMデータを確認する | トップページ | 音がでないなぁ その2 »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: 配布方法を考える:

« PCMデータを確認する | トップページ | 音がでないなぁ その2 »