遅まきながら、「艦隊これくしょん~艦これ~ - オンラインゲーム - DMM.com」と言うゲームを始めました。
このゲーム、flash が必須になっているのでiPhoneでやることができません。でも、運営がdmmと言うこともあって、職場からはアクセスしずらい・・・。
そして、私が持っているMacBook Proは蓋が閉じているとリモートアクセスできないと言う謎仕様なので、リモートでやることができません。
うちで常時起動しているのはFreeBSD8のサーバだけ。
ならば、こいつで艦これが動けばいいのです。
まずは、FreeBSD上のfirefoxでflashが使えるようにする必要があります。この手順は、FreeBSDハンドブックの7.2. Web ブラウザを見ればそのままで行けます。
これで、firefox上で艦これができるようになるのですが、それだけではつまりません。
艦メモ ~艦娘メモリーズ~(艦これ専用ブラウザ) - 理ろぐと言うQtで書かれた艦これ専用ブラウザアプリがあるので、これをFreeBSDで動かすことにします。
Qtは、マルチプラットフォームが売りのGUIライブラリなので、FreeBSDでもそのまま動くはず。
が、portsにあるのはQt 4.8だけ。5系はまだportsで対応していないようです。
しょうがないので、Download Qt, the cross-platform application framework | Qt Project からソースを持ってきてビルドすることにします。
持ってくるのは、The source code is also available as a single zip (280 MB) (Info) file for Windows users or as tar.gz (226 MB) (Info) file for Linux/Mac users.って書いてある「tar.gz」のリンク先から、qt-everywhere-opensource-src-5.1.1.tar.gz。
こいつを展開して、以下のようなシェルスクリプトを作成して実行します。(別にシェルスクリプトにしなくても良いんだけど、何度もやり直すので)
ビルドしていくと、以下のエラーで止まります。
mkspecsにはないみたいだし、なんでかな〜と思ってソースを眺めていると、qtbase/src/plugins/platforms/xcb/xcb-plugin.pro に LIBS += -ldl なんて書いてあります。
今回は、とりあえずFreeBSDでビルドできればいいので、この行を消してしまいましょう。
これは、/usr/local/bin/を優先することで先に進んだ。
qtbaseが終わって先に進んで行くと、webkitで以下のエラー
SettingsMacros.hはヘッダなのに、これをビルドして.oを作ろうとしてるのが問題らしい。
記事の通りに、qtwebkit/Source/WebCore/Makefile.WebCore.Target から SettingsMacros.h を削除してあげたら先に進んだ。
このファイル自体が生成されるファイルなので、git diff の出力はなし。
次は、またundefined reference。
後は、艦メモのビルド方法(Ubuntu編) - 理ろぐを見ながら艦メモをビルド。
はまりポイントは2つ。
Twitter4QMLのビルド時に使うsyncqt.plとqmakeの位置が、/usr/local/Qt-5.1.1/binであること(ハマるところではないか)
後は、KanmusuMemoryは CONFIG += c++11 しているので、OS標準のg++ 4.2.1 ではビルドできない。
portsから g++ 4.6.3 を入れたら、ビルドできた。(指定方法を調べるのが面倒だったので、qmakeでできたMakefileの、CC, CXX, LINKをgcc46/g++46に書き換え)
後は、初めてtwitterのコンシューマーキーとコンシューマーシークレットを取得したりした。
後は、こいつをiPhoneから使うために、vncを試してみたんだけど、なかなかうまくいかず。長くなるので詳細は書かないけど、通常のvncだとQtにキー入力ができず、OpenGLも使えないため艦メモのスクリーンショット機能が使えない。
コンソールでXを立ちあげて、x0vncserverを使うと、うまく行きそうな雰囲気だ。(あまり検証できていない)
このゲーム、flash が必須になっているのでiPhoneでやることができません。でも、運営がdmmと言うこともあって、職場からはアクセスしずらい・・・。
そして、私が持っているMacBook Proは蓋が閉じているとリモートアクセスできないと言う謎仕様なので、リモートでやることができません。
うちで常時起動しているのはFreeBSD8のサーバだけ。
ならば、こいつで艦これが動けばいいのです。
まずは、FreeBSD上のfirefoxでflashが使えるようにする必要があります。この手順は、FreeBSDハンドブックの7.2. Web ブラウザを見ればそのままで行けます。
これで、firefox上で艦これができるようになるのですが、それだけではつまりません。
艦メモ ~艦娘メモリーズ~(艦これ専用ブラウザ) - 理ろぐと言うQtで書かれた艦これ専用ブラウザアプリがあるので、これをFreeBSDで動かすことにします。
Qtは、マルチプラットフォームが売りのGUIライブラリなので、FreeBSDでもそのまま動くはず。
が、portsにあるのはQt 4.8だけ。5系はまだportsで対応していないようです。
しょうがないので、Download Qt, the cross-platform application framework | Qt Project からソースを持ってきてビルドすることにします。
持ってくるのは、The source code is also available as a single zip (280 MB) (Info) file for Windows users or as tar.gz (226 MB) (Info) file for Linux/Mac users.って書いてある「tar.gz」のリンク先から、qt-everywhere-opensource-src-5.1.1.tar.gz。
こいつを展開して、以下のようなシェルスクリプトを作成して実行します。(別にシェルスクリプトにしなくても良いんだけど、何度もやり直すので)
#!/bin/bash ./configure -opensource -confirm-license -no-compile-examples |& tee configure.logconfigure.logの最後の方だけ引用しておくと、
Build options: Configuration .......... accessibility accessibility-atspi-bridge alsa audio-backend clock-gettime clock-monotonic concurrent cups dbus evdev fontconfig full-config getaddrinfo getifaddrs glib gnu-libiconv gstreamer gtk2 gtkstyle icu ipv6ifname large-config largefile medium-config minimal-config nis opengl openssl png precompile_header qpa qpa reduce_exports release rpath shared small-config sse2 sse3 ssse3 system-freetype system-jpeg system-png system-zlib v8 v8snapshot xcb xcb-glx xcb-render xcb-xlib xinput2 xlib xrender Build parts ............ libs tools examples Mode ................... release Using C++11 ............ no Using PCH .............. yes Target compiler supports: SSE2/SSE3/SSSE3 ...... yes/yes/yes SSE4.1/SSE4.2 ........ no/no AVX/AVX2 ............. no/no Qt modules and options: Qt D-Bus ............... yes (loading dbus-1 at runtime) Qt Concurrent .......... yes Qt GUI ................. yes Qt Widgets ............. yes JavaScriptCore JIT ..... yes (To be decided by JavaScriptCore) QML debugging .......... yes Use system proxies ..... no Support enabled for: Accessibility .......... yes ALSA ................... yes CUPS ................... yes FontConfig ............. yes Iconv .................. gnu ICU .................... yes Image formats: GIF .................. yes (plugin, using system library) JPEG ................. yes (plugin, using system library) PNG .................. yes (in QtGui, using system library) Glib ................... yes GStreamer .............. yes GTK theme .............. yes Large File ............. yes libudev ................ no Networking: getaddrinfo .......... yes getifaddrs ........... yes IPv6 ifname .......... yes OpenSSL .............. yes (loading libraries at run-time) NIS .................... yes OpenGL ................. desktop OpenVG ................. no PCRE ................... system pkg-config ............. yes PulseAudio ............. no QPA backends: DirectFB ............. no EGLFS ................ no KMS .................. no LinuxFB .............. no XCB .................. yes (system library) MIT-SHM ............ yes Xcursor ............ yes (loaded at runtime) Xfixes ............. yes (loaded at runtime) Xi ................. no Xi2 ................ yes Xinerama ........... yes (loaded at runtime) Xrandr ............. yes (loaded at runtime) Xrender ............ yes XKB ................ no XShape ............. yes XSync .............. yes XVideo ............. yes Session management ..... yes SQL drivers: DB2 .................. no InterBase ............ no MySQL ................ yes (plugin) OCI .................. no ODBC ................. yes (plugin) PostgreSQL ........... yes (plugin) SQLite 2 ............. yes (plugin) SQLite ............... yes (plugin, using bundled copy) TDS .................. no udev ................... no xkbcommon .............. yes zlib ................... yes (system library) Qt is now configured for building. Just run 'gmake'. Once everything is built, you must run 'gmake install'. Qt will be installed into /usr/local/Qt-5.1.1みたいな感じ。実際には、ここまで来るのが長くて、必要なライブラリをいろいろ入れて上げないとこの状態になりません。元から入っているものがあるので、全て列挙できませんが、私が追加したライブラリ(ports)を以下に列挙しておきます。
- graphics/svgalib
- x11/libxcb
- x11/libxkbcommon
- x11/xcb
- x11/xcb-proto
- x11/xcb-util
- x11/xcb-util-image
- x11/xcb-util-keysyms
- x11/xcb-util-renderutil
- x11/xcb-util-wm
ビルドしていくと、以下のエラーで止まります。
/usr/bin/ld: cannot find -ldl gmake[6]: *** [../../../../plugins/platforms/libqxcb.so] エラー 1 gmake[6]: ディレクトリ `/var/src/qt/qt-everywhere-opensource-src-5.1.1/qtbase/src/plugins/platforms/xcb' から出ますlibdlがないと言うエラーですが、FreeBSDの場合はlibcに含まれています。
mkspecsにはないみたいだし、なんでかな〜と思ってソースを眺めていると、qtbase/src/plugins/platforms/xcb/xcb-plugin.pro に LIBS += -ldl なんて書いてあります。
今回は、とりあえずFreeBSDでビルドできればいいので、この行を消してしまいましょう。
diff --git a/qtbase/src/plugins/platforms/xcb/xcb-plugin.pro b/qtbase/src/plugins/pl atforms/xcb/xcb-plugin.pro index 8299528..4559081 100644 --- a/qtbase/src/plugins/platforms/xcb/xcb-plugin.pro +++ b/qtbase/src/plugins/platforms/xcb/xcb-plugin.pro @@ -40,7 +40,7 @@ HEADERS = \ qxcbimage.h \ qxcbxsettings.h -LIBS += -ldl +#LIBS += -ldl # needed by GLX, Xcursor ... contains(QT_CONFIG, xcb-xlib) {先に進むと、今度はsqlite3のビルドでエラーになります。
../../../3rdparty/sqlite/sqlite3.c:23531: error: 'fchmod' undeclared here (not in a function) (中略) gmake[5]: *** [.obj/release-shared/sqlite3.o] エラー 1 gmake[5]: ディレクトリ `/var/src/qt/qt-everywhere-opensource-src-5.1.1/qtbase/src/plugins/sqldrivers/sqlite' から出ますfchmod は sys/stat.h にプロトタイプ宣言があるはずで、/usr/include/sys/stat.h を見ると #if __POSIX_VISIBLE >= 200112 であれば宣言されるように見えますが、__POSIX_VISIBLEがなんなのかわかりません。追うのも面倒なので、sqlite3.c に直接プロトタイプ宣言を追加してしまいます。
diff --git a/qtbase/src/3rdparty/sqlite/sqlite3.c b/qtbase/src/3rdparty/sqlite/sqlit e3.c index 03fa649..2675d25 100644 --- a/qtbase/src/3rdparty/sqlite/sqlite3.c +++ b/qtbase/src/3rdparty/sqlite/sqlite3.c @@ -23019,6 +23019,7 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){ #include <sys/mman.h> #endif +int fchmod(int, mode_t); #if SQLITE_ENABLE_LOCKING_STYLE # include <sys/ioctl.h>さらに進むと、リンク時にundefined referenceが出ます。
g++ -Wl,--no-undefined -Wl,-O1 -pthread -Wl,-rpath,/usr/local/Qt-5.1.1/lib -Wl,-rpath-link,/var/src/qt/qt-everywhere-opensource-src-5.1.1/qtbase/lib -shared -o libqevdevmouseplugin.so .obj/release-shared/main.o -L/usr/local/lib -L/usr/X11R6/lib -L/var/src/qt/qt-everywhere-opensource-src-5.1.1/qtbase/lib -lQt5PlatformSupport -lfontconfig -lfreetype -lgthread-2.0 -pthread -lglib-2.0 -lintl -lXext -lX11 -lm -lXrender -lQt5DBus -lQt5Gui -lQt5Core -lGL /var/src/qt/qt-everywhere-opensource-src-5.1.1/qtbase/lib/libQt5PlatformSupport.a(qevdevmousemanager.o)(.text+0x994): In function `QEvdevMouseManager::QEvdevMouseManager(QString const&, QString const&, QObject*)': : undefined reference to `QDeviceDiscovery::create(QFlags<QDeviceDiscovery::QDeviceType>, QObject*)' /var/src/qt/qt-everywhere-opensource-src-5.1.1/qtbase/lib/libQt5PlatformSupport.a(qevdevmousemanager.o)(.text+0x9b4): In function `QEvdevMouseManager::QEvdevMouseManager(QString const&, QString const&, QObject*)': : undefined reference to `QDeviceDiscovery::scanConnectedDevices()' /var/src/qt/qt-everywhere-opensource-src-5.1.1/qtbase/lib/libQt5PlatformSupport.a(qevdevmousemanager.o)(.text+0x16f4): In function `QEvdevMouseManager::QEvdevMouseManager(QString const&, QString const&, QObject*)': : undefined reference to `QDeviceDiscovery::create(QFlags<QDeviceDiscovery::QDeviceType>, QObject*)' /var/src/qt/qt-everywhere-opensource-src-5.1.1/qtbase/lib/libQt5PlatformSupport.a(qevdevmousemanager.o)(.text+0x1714): In function `QEvdevMouseManager::QEvdevMouseManager(QString const&, QString const&, QObject*)': : undefined reference to `QDeviceDiscovery::scanConnectedDevices()' gmake[5]: *** [../../../../plugins/generic/libqevdevmouseplugin.so] エラー 1 gmake[5]: ディレクトリ `/var/src/qt/qt-everywhere-opensource-src-5.1.1/qtbase/src/plugins/generic/evdevmouse' から出ますcreateとscanConnectedDevicesはQDeviceDiscoveryにあるはずですが、なんでビルドされないんだろーと思って見ていたところ、qtbase/src/platformsupport/devicediscovery/devicediscovery.pri の中で、linux のときしかビルドされないようになっていました。evdev があるならlinuxじゃなくてもビルドして良いだろうと、限定を外します。
diff --git a/qtbase/src/platformsupport/devicediscovery/devicediscovery.pri b/qtbase /src/platformsupport/devicediscovery/devicediscovery.pri index 9a58eee..f5176dc 100644 --- a/qtbase/src/platformsupport/devicediscovery/devicediscovery.pri +++ b/qtbase/src/platformsupport/devicediscovery/devicediscovery.pri @@ -1,4 +1,4 @@ -linux:contains(QT_CONFIG, evdev) { +contains(QT_CONFIG, evdev) { HEADERS += $$PWD/qdevicediscovery_p.h contains(QT_CONFIG, libudev) {さらに先に進むと、flexのオプションが違うとエラーに。
( test -e Makefile.ANGLE.DerivedSources || /var/src/qt/qt-everywhere-opensource-src-5.1.1/qtbase/bin/qmake /var/src/qt/qt-everywhere-opensource-src-5.1.1/qtwebkit/Source/ThirdParty/ANGLE/DerivedSources.pri -o Makefile.ANGLE.DerivedSources ) && make -f Makefile.ANGLE.DerivedSources flex --noline --nounistd --outfile=generated/glslang_lex.cpp src/compiler/glslang.l flex: unknown flag '-'. For usage, try flex --help *** Error code 1 Stop in /var/src/qt/qt-everywhere-opensource-src-5.1.1/qtwebkit/Source/ThirdParty/ANGLE.調べてみると、システムに標準で入っているflex 2.5.4 だとlong形式のオプションはなくて、portsから入れた2.5.37だと解釈できるらしい。私の場合、portsのflexはインストールされていたんだけど、PATHが/usr/local/bin/よりも/usr/bin/を優先していたのでエラーになっていた。
これは、/usr/local/bin/を優先することで先に進んだ。
qtbaseが終わって先に進んで行くと、webkitで以下のエラー
enerated/SettingsMacros.h:31:11: error: missing binary operator before token "(" generated/SettingsMacros.h:54:11: error: missing binary operator before token "(" generated/SettingsMacros.h:77:11: error: missing binary operator before token "(" generated/SettingsMacros.h:108:11: error: missing binary operator before token "(" *** Error code 1 Stop in /var/src/qt/qt-everywhere-opensource-src-5.1.1/qtwebkit/Source/WebCore.なんだべーと思って調べた所、Building Qt 5.0.0 fails on Windows 8 with MinGW 4.7.2 | Qt Project forums | Qt Projectと言う記事を発見。
SettingsMacros.hはヘッダなのに、これをビルドして.oを作ろうとしてるのが問題らしい。
記事の通りに、qtwebkit/Source/WebCore/Makefile.WebCore.Target から SettingsMacros.h を削除してあげたら先に進んだ。
このファイル自体が生成されるファイルなので、git diff の出力はなし。
次は、またundefined reference。
/var/src/qt/qt-everywhere-opensource-src-5.1.1/qtwebkit/lib/libQt5WebKit.so: undefined reference to `void WTF::freeOwnedGPtr<_GError>(_GError*)' *** Error code 1 Stop in /var/src/qt/qt-everywhere-opensource-src-5.1.1/qtwebkit/Source/WebKit2.undefined referenceが出たら*.proか*.priを疑え、と言うことでqtwebkit/Source/WTF/WTF.pri が犯人。
diff --git a/qtwebkit/Source/WTF/WTF.pri b/qtwebkit/Source/WTF/WTF.pri index 2b4e8bc..f88b3fd 100644 --- a/qtwebkit/Source/WTF/WTF.pri +++ b/qtwebkit/Source/WTF/WTF.pri @@ -20,7 +20,7 @@ mac { } } -linux-*:use?(GSTREAMER) { +use?(GSTREAMER) { DEFINES += ENABLE_GLIB_SUPPORT=1 PKGCONFIG += glib-2.0 gio-2.0 }これで、無事にQtのビルドが成功。後は、rootになってgmake installしてあげれば、/usr/local/Qt-5.1.1にインストールされる。
後は、艦メモのビルド方法(Ubuntu編) - 理ろぐを見ながら艦メモをビルド。
はまりポイントは2つ。
Twitter4QMLのビルド時に使うsyncqt.plとqmakeの位置が、/usr/local/Qt-5.1.1/binであること(ハマるところではないか)
後は、KanmusuMemoryは CONFIG += c++11 しているので、OS標準のg++ 4.2.1 ではビルドできない。
portsから g++ 4.6.3 を入れたら、ビルドできた。(指定方法を調べるのが面倒だったので、qmakeでできたMakefileの、CC, CXX, LINKをgcc46/g++46に書き換え)
後は、初めてtwitterのコンシューマーキーとコンシューマーシークレットを取得したりした。
後は、こいつをiPhoneから使うために、vncを試してみたんだけど、なかなかうまくいかず。長くなるので詳細は書かないけど、通常のvncだとQtにキー入力ができず、OpenGLも使えないため艦メモのスクリーンショット機能が使えない。
コンソールでXを立ちあげて、x0vncserverを使うと、うまく行きそうな雰囲気だ。(あまり検証できていない)
カテゴリ
FreeBSDトラックバック(0)
このブログ記事を参照しているブログ一覧: FreeBSD 8 で Qt 5.1.1を動かす
このブログ記事に対するトラックバックURL: https://www.wizard-limit.net/cgi-bin/mt/mt-tb.cgi/3101
コメントする