Armadilloフォーラム

Qt5でwebkit

y.nakamura

2015年1月19日 0時53分

中村です。

Armadillo-840のQt5でwebkitを使いたいのですが、
いろいろ調べたり試したりしたところ、
ATDE5ではどうも無理そうな気がしてきました。
方法はあるでしょうか?

試行錯誤もたくさんあり、詳しくは書ききれないのですが、
簡単に書くと、こういう状況です。
- Qt5からはwebkitはwebkitwidgetsという名称になった
- webkitwidgetsはlibqt5webkit5パッケージに入っている
- ATDE5のQt5関連のバージョンは5.0.2
- libqt5webkit5の5.0.2版のi386やamd64はsnapshotのサイトにある
- しかし、5.0.2版は、armhfなどi386とamd64以外が存在しない
- ためしにATDE5にi386のlibqt5webkit5_5.0.2-3_i386を入れてみた
- libwebp4(バージョン指定なし)とqtbase-abi-5-0-2に依存
- libwebp4はsnapshotにあったlibwebp4_0.3.0-3_i386を入れられた
- qtbase-abi-5-0-2はみつからない(もっと新しいのはある)
- そもそもlibqt5webkit5の5.0.2版のarmhfバイナリパッケージがない
- ならば、Qt5全体をバージョンアップしたら、と考えたが...
- 5.0.2+dfsg1-4atmark1なcrossがあり、自分ではどうにもならない
- libqt5webkit5の5.0.2版ソースからのインストールは自分には無理そう

よろしくお願いします。

--
なかむら

コメント

at_kojiro.yamada

2015年1月22日 11時41分

こちらでもQt5.0.2のソースから依存するモジュールも含めたqtwebkitのビルドを行ってみます。

> こちらでもQt5.0.2のソースから依存するモジュールも含めたqtwebkitのビルドを行ってみます。

お手数をおかけしますが、よろしくお願いいたします。

--
なかむら

at_kojiro.yamada

2015年2月5日 16時44分

> > こちらでもQt5.0.2のソースから依存するモジュールも含めたqtwebkitのビルドを行ってみます。
> お手数をおかけしますが、よろしくお願いいたします。
Debianで起動したArmadillo-840で、qtwebkitのビルドを行いました。

QWebViewを使用してウェブサイトを表示できましたが、
Segmentation faultが発生することがあります。

Segmentation faultの原因については現在調査中です。

.soファイルまとめたアーカイブを配置しましたので試してみてください。
http://download.atmark-techno.com/misc/forum/qtwebkit-5.0.2-armhf.tar.gz
http://download.atmark-techno.com/misc/forum/qtwebkit-5.0.2-armhf.tar.g…

■ビルド手順
1. a840の準備
Armadillo-840 製品マニュアルを参考に、Debianのルートファイルシステムを構築して、Armadilloを起動してください。
http://manual.atmark-techno.com/armadillo-840/armadillo-840_product_man…

2. ビルド環境の作成と依存パッケージのインストール

[Debian ~]# apt-get update && apt-get upgrade
[Debian ~]# apt-get install build-essential
[Debian ~]# apt-get install unixodbc-dev zlib1g-dev libgtk2.0-dev \
libmtdev-dev libglu-dev libicu-dev libjpeg-turbo8-dev \
libmysqlclient-dev libpng-dev libpq-dev libsqlite3-dev libssl-dev \
libudev-dev libxcb-icccm4-dev libxcb-image0-dev libxcb-keysyms1-dev \
libxcb-randr0-dev libxcb-render-util0-dev libxcb-render0-dev \
libxcb-shape0-dev libxcb-shm0-dev libxcb-sync0-dev \
libxcb-xfixes0-dev libxi-dev libxrender-dev pkg-kde-tools \
unixodbc-dev zlib1g-dev libgtk2.0-dev libmtdev-dev libgl1-mesa-dev \
libglib2.0-dev libglu1-mesa-dev freetds-dev gdb libatspi2.0-dev \
libcups2-dev libdbus-1-dev libfontconfig1-dev libfreetype6-dev \
libgl1-mesa-dev debhelper gperf bison ruby flex

3. swap領域の作成
ビルド中にメモリが足りなくなる可能性があるため、3GBのswap領域を作成します。

[Debian ~]# dd if=/dev/zero of=swap bs=8M count=384
[Debian ~]# mkswap swap
[Debian ~]# swapon swap

4. パッチとソースコードのダウンロードおよび展開

[Debian ~]# wget http://download.qt-project.org/archive/qt/5.0/5.0.2/single/qt-everywhere-opensource-src-5.0.2.tar.xz
[Debian ~]# wget http://download.atmark-techno.com/armadillo-840/cross-dev/source/qtbase-opensource-src_5.0.2+dfsg1-4atmark1.debian.tar.gz
[Debian ~]# wget http://users.atmark-techno.com/sites/users.atmark-techno.com/files/forum/fix_eglfs_build_error.patch
[Debian ~]# tar xzf qtbase-opensource-src_5.0.2+dfsg1-4atmark1.1.debian.tar.gz
[Debian ~]# tar -Jxf qt-everywhere-opensource-src-5.0.2.tar.xz
[Debian ~]# tar xzvf qtbase-opensource-src_5.0.2+dfsg1-4atmark1.debian.tar.gz

5. パッチの適用

[Debian ~]# cp fix_eglfs_build_error.patch debian/patches/
[Debian ~/qt-everywhere-opensource-src-5.0.2/qtbase]# cd qt-everywhere-opensource-src-5.0.2/qtbase/
[Debian ~/qt-everywhere-opensource-src-5.0.2/qtbase]# cat ../../debian/patches/undef_B0.diff |patch -p1
[Debian ~/qt-everywhere-opensource-src-5.0.2/qtbase]# cat ../../debian/patches/deppath_gnu.diff |patch -p1
[Debian ~/qt-everywhere-opensource-src-5.0.2/qtbase]# cat ../../debian/patches/build_examples.patch |patch -p1
[Debian ~/qt-everywhere-opensource-src-5.0.2/qtbase]# cat ../../debian/patches/qeglfswindow.cpp.patch |patch -p1
[Debian ~/qt-everywhere-opensource-src-5.0.2/qtbase]# cat ../../debian/patches/evdev.patch |patch -p1
[Debian ~/qt-everywhere-opensource-src-5.0.2/qtbase]# cat ../../debian/patches/eglfs_display.patch |patch -p1
[Debian ~/qt-everywhere-opensource-src-5.0.2/qtbase]# cat ../../debian/patches/fix_eglfs_build_error.patch |patch -p1

6. ビルド
ビルドが完了するまで1日ほど、かかりますのでご注意ください。

[Debian ~/qt-everywhere-opensource-src-5.0.2/qtbase]# cp -a mkspecs/linux-g++ mkspecs/glibc-g++
[Debian ~/qt-everywhere-opensource-src-5.0.2/qtbase]# cd ..
[Debian ~/qt-everywhere-opensource-src-5.0.2]# ./configure -confirm-license -prefix "/usr" -bindir \
"/usr/lib/arm-linux-gnueabihf/qt5/bin" -libdir \
"/usr/lib/arm-linux-gnueabihf" -docdir "/usr/share/qt5/doc" \
-headerdir "/usr/include/qt5" -datadir "/usr/share/qt5" -archdatadir \
"/usr/lib/arm-linux-gnueabihf/qt5" -hostdatadir "/usr/share/qt5" \
-plugindir "/usr/lib/arm-linux-gnueabihf/qt5/plugins" -importdir \
"/usr/lib/arm-linux-gnueabihf/qt5/imports" -translationdir \
"/usr/share/qt5/translations" -sysconfdir "/etc/xdg" -examplesdir \
"/usr/lib/arm-linux-gnueabihf/qt5/examples" -opensource \
-plugin-sql-mysql -plugin-sql-odbc -plugin-sql-psql \
-plugin-sql-sqlite -no-sql-sqlite2 -plugin-sql-tds -system-sqlite \
-platform linux-g++ -system-zlib -system-libpng -system-libjpeg \
-openssl -no-rpath -verbose -optimized-qmake -dbus-linked \
-reduce-relocations -no-strip -no-separate-debug-info -qpa eglfs \
-xcb -glib -icu -accessibility --no-directfb -no-sql-ibase -no-pch \
-arch armv6 -opengl es2
[Debian ~/qt-everywhere-opensource-src-5.0.2]# make module-qtwebkit
ファイル ファイルの説明
fix_eglfs_build_error.patch

中村です。

> Debianで起動したArmadillo-840で、qtwebkitのビルドを行いました。

どうもありがとうございます。
事情により今すぐに試すことができないのですが、
時間を作ってやってみます。

> 6. ビルド
> ビルドが完了するまで1日ほど、かかりますのでご注意ください。

まずは、作っていただいた.soファイルを使えば、
ビルドはしないでも済むのですよね?

--
なかむら

at_kojiro.yamada

2015年2月5日 17時50分

> > 6. ビルド
> > ビルドが完了するまで1日ほど、かかりますのでご注意ください。
>
> まずは、作っていただいた.soファイルを使えば、
> ビルドはしないでも済むのですよね?
はい。
こちらで作成した.soファイルをそのまま使っていただければと思います。

> > まずは、作っていただいた.soファイルを使えば、
> > ビルドはしないでも済むのですよね?
> はい。
> こちらで作成した.soファイルをそのまま使っていただければと思います。

ご返答、ありがとうございます。

--
なかむら

中村です。

作っていただいたQtWebKitの.soファイルを使って、
動作の確認ができましたので、お知らせしておきます。

QWebViewを使用して簡単なwebブラウザを作り、
あちこちのサイトを見て歩いてみましが、今のところ
Segmentation faultは発生していません。

ATDE5のCtCreatorでビルドして、フラッシュブートの
Armadillo-840の液晶で試しました。
操作はUSBのキーボードとマウスです。

動かしていると
QEGLPlatformContext::makeCurrent: eglError: 300d, this: 0xa7280
QEGLPlatformContext::swapBuffers(): eglError: 12301, this: 0xa7280
のようなエラーが大量に発生して身動きがとれなく
なってしまうことがたまにありますが、
これは別の問題でしょう。
ググるとたくさんでてきますし。

ATDE5環境のQtCreatorでQtWebKitを使ったプログラムを
開発できるようにするには、2~3追加が必要でした。

まず、ヘッダファイル。
i386のDebainパッケージならば
libqt5webkit5-dev_5.0.2-3_i386.deb
に入っているものなのですが、Qtのソース
http://download.qt-project.org/archive/qt/5.0/5.0.2/single/qt-everywher…
の中を探しても見つかりません。(探し方が悪い?)

仕方がないので、i386のDebainパッケージの
libqt5webkit5-dev_5.0.2-3_i386.debから
usr/include/qt5/QtWebKit/
usr/include/qt5/QtWebKitWidgets/
を取り出して、
/usr/arm-linux-gnueabihf/include/qt5/
の下に入れました。
(最初の投稿に書いたような理由で、ATDE5環境に
libqt5webkit5-dev_5.0.2-3_i386.debを入れるのは
断念しています)

次に、Qtの開発環境にWebKitとwebkitwidgetsの
モジュールの存在を教えてあげるためのファイル。

これも、どこからもってきたらいいのかわからず、
(A840でSDブートのDebianを作ってQtWebKitの
ビルドすれば一緒にできあがるのかもしれませんが、
まだ、やってません)
他のモジュールの状態を調べてみると、クロス用と
してのファイルは必要がないみたいでしたので、
ヘッダファイルと同じようにi386のDebianの
libqt5webkit5-dev_5.0.2-3_i386.debから
qt_lib_webkit.priとqt_lib_webkitwidgets.priを
取り出して、ATDE5の/usr/share/qt5/mkspecs/modules/
の下に入れました。

このファイルがないと、QtCreatorで.proファイルに
QT += webkitwidgets
を書くと
Project ERROR: Unknown module(s) in QT: webkitwidgets
というエラーがでます。

最後の1つは必須ではないのですが、
atmark-distのqt5のMakefileの修正です。

romfs/binの下のwebkitを使ったバイナリを入れて
make romfsすれば自動でライブラリを取り込んで
くれますが、QtCreatorでいきなりリモートデバッグを
しようとするようなときに、ライブラリをromfsに
入れてくれるようにするための修正です。

--- user/qt5/Makefile-orig      2014-12-15 18:56:33.000000000 +0900
+++ user/qt5/Makefile   2015-02-10 07:51:28.251354793 +0900
@@ -90,11 +90,16 @@
        QtAudioEngine/libdeclarative_audioengine.so     \
        QtMultimedia/libdeclarative_multimedia.so
 
+WEBKIT_LIBS = \
+       libQt5WebKit.so.5               \
+       libQt5WebKitWidgets.so.5
+
 LIBS_y += $(BASE_LIBS)
 LIBS_y += $(JSBACKEND_LIBS)
 LIBS_y += $(XMLPATTERNS_LIBS)
 LIBS_y += $(DECLARATIVE_LIBS)
 #LIBS_y += $(MULTIMEDIA_LIBS)
+LIBS_y += $(WEBKIT_LIBS)
 
 PLUGINS_y += $(BASE_PLUGINS)
 PLUGINS_y += $(DECLARATIVE_PLUGINS)

--
なかむら

先ほど
> あちこちのサイトを見て歩いてみましが、今のところ
> Segmentation faultは発生していません。
と書きましたが、出ました。それも何度も。
出るサイトと出ないサイトがあるみたいな感じです。

--
なかむら