忍者ブログ

素人翻訳

適当に翻訳する。

qt-5.1.1構築時のエラー

 qt-5.1.1を構築した時に出たエラーとその解決方法。使用したのは、qt-everywhere-opensource-src-5.1.1.tar.xz。

$ ./configure
...
...
Running configuration tests...
The test for linking against libxcb and support libraries failed!
You might need to install dependency packages, or pass -qt-xcb.
See src/plugins/platforms/xcb/README.
$

 libxcb系のライブラリは自作のものが入っていたのだが、とりあえず上手く行かなかった。

 qt-everywhere-opensource-src-5.1.1/qtbase/src/plugins/platforms/xcb/README によると、

...
...
REDUCING RUNTIME DEPENDENCIES

The '-qt-xcb' configure option can be used to get rid of most xcb- dependencies. Only libxcb will
still be linked dynamically, since it will be most likely be pulled in via other dependencies anyway.
This should allow for binaries that are portable across most modern Linux distributions.
(訳)
(「-qt-xcb」を指定すると、「xcb-〜〜」の依存問題から解放される。)
(その場合でも「libxcb」自体は必要。云々。)

 「./configure -qt-xcb」で片付けることにした。

$ ./configure -qt-xcb
...
...
$ make
...
...
g++ -c -include .pch/release-shared/Qt5Network -pipe -O2 -fvisibility=hidden -fvisibility-inlines-hidden -std=c++0x -fno-exceptions -Wall -W -D_REENTRANT -fPIC -DQT_NO_LIBUDEV -DQT_NO_USING_NAMESPACE -DQT_BUILD_NETWORK_LIB -DQT_BUILDING_QT -DQT_NO_CAST_TO_ASCII -DQT_ASCII_CAST_WARNINGS -DQT_MOC_COMPAT -DQT_USE_QSTRINGBUILDER -DQT_DEPRECATED_WARNINGS -DQT_DISABLE_DEPRECATED_BEFORE=0x050000 -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_CORE_LIB -I../../mkspecs/linux-g++ -I. -I../../include -I../../include/QtNetwork -I../../include/QtNetwork/5.1.1 -I../../include/QtNetwork/5.1.1/QtNetwork -I../3rdparty/zlib -Ikernel -I../../include/QtCore -I../../include/QtCore/5.1.1 -I../../include/QtCore/5.1.1/QtCore -I.moc/release-shared -o .obj/release-shared/qsslcertificate.o ssl/qsslcertificate.cpp
ssl/qsslcertificate.cpp: In member function ‘QByteArray QSslCertificate::version() const’:
ssl/qsslcertificate.cpp:288: error: invalid use of incomplete type ‘struct x509_st’
/usr/local/include/openssl/ossl_typ.h:119: error: forward declaration of ‘struct x509_st’
ssl/qsslcertificate.cpp: In member function ‘QByteArray QSslCertificate::serialNumber() const’:
ssl/qsslcertificate.cpp:300: error: invalid use of incomplete type ‘struct x509_st’
/usr/local/include/openssl/ossl_typ.h:119: error: forward declaration of ‘struct x509_st’
ssl/qsslcertificate.cpp: In member function ‘QSslKey QSslCertificate::publicKey() const’:
ssl/qsslcertificate.cpp:562: error: invalid use of incomplete type ‘struct x509_st’
/usr/local/include/openssl/ossl_typ.h:119: error: forward declaration of ‘struct x509_st’
ssl/qsslcertificate.cpp:566: error: invalid use of incomplete type ‘struct evp_pkey_st’
/usr/local/include/openssl/ossl_typ.h:93: error: forward declaration of ‘struct evp_pkey_st’
ssl/qsslcertificate.cpp:570: error: invalid use of incomplete type ‘struct evp_pkey_st’
/usr/local/include/openssl/ossl_typ.h:93: error: forward declaration of ‘struct evp_pkey_st’
ssl/qsslcertificate.cpp:574: error: invalid use of incomplete type ‘struct evp_pkey_st’
/usr/local/include/openssl/ossl_typ.h:93: error: forward declaration of ‘struct evp_pkey_st’
make[3]: *** [.obj/release-shared/qsslcertificate.o] エラー 1
make[3]: ディレクトリ `/home/user12/qt/qt-everywhere-opensource-src-5.1.1/qtbase/src/network' から出ます
make[2]: *** [sub-network-make_first] エラー 2
make[2]: ディレクトリ `/home/user12/qt/qt-everywhere-opensource-src-5.1.1/qtbase/src' から出ます
make[1]: *** [sub-src-make_first] エラー 2
make[1]: ディレクトリ `/home/user12/qt/qt-everywhere-opensource-src-5.1.1/qtbase' から出ます
make: *** [module-qtbase-make_first] エラー 2
$

 SSL関係のエラーが出た。調べてみると、openssl は「1.0」と「1.1」で ABI が変わっているらしく、qt-5.1.1 では古い方の openssl が必要だとか。SSLは不要なので、
「./configure -qt-xcb -no-openssl」で解決。

$ ./configure -qt-xcb -no-openssl
...
...
$ make
...
...
...
g++ -Wl,-O1 -Wl,-rpath,/usr/local/Qt-5.1.1/lib -o styles .obj/release-shared/main.o .obj/release-shared/norwegianwoodstyle.o .obj/release-shared/widgetgallery.o .obj/release-shared/qrc_styles.o .obj/release-shared/moc_norwegianwoodstyle.o .obj/release-shared/moc_widgetgallery.o -L/home/user12/SourceCode/qt-everywhere-opensource-src-5.1.1/qtbase/lib -lQt5Widgets -lQt5Gui -lQt5Core -lpthread
make[5]: ディレクトリ `/home/user12/SourceCode/qt-everywhere-opensource-src-5.1.1/qtbase/examples/widgets/widgets/styles' から出ます
make[4]: ディレクトリ `/home/user12/SourceCode/qt-everywhere-opensource-src-5.1.1/qtbase/examples/widgets/widgets' から出ます
cd windowcontainer/ && ( test -e Makefile || /home/user12/SourceCode/qt-everywhere-opensource-src-5.1.1/qtbase/bin/qmake /home/user12/SourceCode/qt-everywhere-opensource-src-5.1.1/qtbase/examples/widgets/windowcontainer/windowcontainer.pro -o Makefile ) && make -f Makefile
make[4]: ディレクトリ `/home/user12/SourceCode/qt-everywhere-opensource-src-5.1.1/qtbase/examples/widgets/windowcontainer' に入ります
/home/user12/SourceCode/qt-everywhere-opensource-src-5.1.1/qtbase/bin/moc -DQT_NO_LIBUDEV -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../../mkspecs/linux-g++ -I. -I../../gui/openglwindow -I../../../include -I../../../include/QtWidgets -I../../../include/QtGui -I../../../include/QtCore -I.moc/release-shared -I/usr/lib/gcc/x86_64-vine-linux/4.4.5/../../../../include/c++/4.4.5 -I/usr/lib/gcc/x86_64-vine-linux/4.4.5/../../../../include/c++/4.4.5/x86_64-vine-linux -I/usr/lib/gcc/x86_64-vine-linux/4.4.5/../../../../include/c++/4.4.5/backward -I/usr/local/include -I/usr/lib/gcc/x86_64-vine-linux/4.4.5/include -I/usr/include windowcontainer.cpp -o .moc/release-shared/windowcontainer.moc
g++ -c -pipe -O2 -fno-exceptions -Wall -W -D_REENTRANT -fPIE -DQT_NO_LIBUDEV -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../../mkspecs/linux-g++ -I. -I../../gui/openglwindow -I../../../include -I../../../include/QtWidgets -I../../../include/QtGui -I../../../include/QtCore -I.moc/release-shared -o .obj/release-shared/windowcontainer.o windowcontainer.cpp
In file included from windowcontainer.cpp:41:
../../gui/openglwindow/openglwindow.h:52: error: expected class-name before ‘{’ token
make[4]: *** [.obj/release-shared/windowcontainer.o] エラー 1
make[4]: ディレクトリ `/home/user12/SourceCode/qt-everywhere-opensource-src-5.1.1/qtbase/examples/widgets/windowcontainer' から出ます
make[3]: *** [sub-windowcontainer-make_first] エラー 2
make[3]: ディレクトリ `/home/user12/SourceCode/qt-everywhere-opensource-src-5.1.1/qtbase/examples/widgets' から出ます
make[2]: *** [sub-widgets-make_first] エラー 2
make[2]: ディレクトリ `/home/user12/SourceCode/qt-everywhere-opensource-src-5.1.1/qtbase/examples' から出ます
make[1]: *** [sub-examples-make_first] エラー 2
make[1]: ディレクトリ `/home/user12/SourceCode/qt-everywhere-opensource-src-5.1.1/qtbase' から出ます
make: *** [module-qtbase-make_first] エラー 2
$

 OpenGL関連のエラー。PKG_CONFIG_PATH等を確認し、
「./configure -qt-xcb -no-openssl -no-opengl」を試しても同じエラーが出た。

 エラーをよく見てみると、
「/home/user12/SourceCode/qt-everywhere-opensource-src-5.1.1/qtbase/examples/widgets/~~」
とあり、OpenGLを使用するサンプル・プログラムの構築で失敗している。「-no-opengl」を指定しても、勝手に作ってしまうようだ。

 サンプルは要らないので、
「./configure -qt-xcb -no-openssl -no-opengl -no-compile-examples
で解決。これでmake、sudo make install ともに成功。

 英語のサイトを見ていると、「なぜ古いQtをコンパイルするのか」「どうして自分で作ろうとするのか」といった書き込みがチラホラあった。

PR

1994年頃の「セッション管理」(デスクトップ)

 W. Keith Edwards 氏の「Session Management for Collaborative Applications」を読んだ。以下はその時のメモ。

++++++++++

★「Session Management」の定義
 ネットワークを越えて、協働状況(collaborative situations)を開始し、停止し、これに参加し、これから離脱し、あるいはこれを閲覧する処理のこと。協働状況とは、例えば、複数の利用者が共通のエディタを使って単一の文書を編輯している状況や、大勢の人間で行うビデオ会議など。

★1994年当時の問題
・セッション・マネジメントは各アプリケーションの下位システムとして実装されており、アプリケーションを作る度に車輪の再開発を行っている。
・セッション・マネジメント機能は各アプリケーションのおまけに過ぎず、作りが甘い。
・セッション・マネジメント機能が各アプリケーションに属しているため、全体(例えばある利用者のデスクトップ全体)的な機能の切り替えが出来ない。

★「application-centered」な実装から「environment-centered」な実装への移行
・個々のアプリケーションにセッション・マネジメント機能を持たせるのではなく、共通機能(shared run-time facility)とそれを呼び出す共通API(Common API)を用意する、という考え方が出てきた。
・これによってポリシーが実装可能になった。共通機能と共通APIのお陰で、同APIを使用するアプリケーション全てに対して、統制を加えることが出来るようになった。
☆アプリケーションのセッション管理から、デスクトップのセッション管理へ???

★セッション・マネジメントの2つのモデル
・「explicit session management」型と「implicit session management」型。
・アプリケーション中心の開発ではなく、環境中心の開発に適した新しいセッション・マネジメントのモデルは「implicit session management」モデルである。

★「explicit session management」とは何か
・明示的にセッションを創設する。
・セッションを命名し、その名前を利用者に広報する。
・明示的にセッションへの参加を表明したり、招待したりする。
・招待制(initiator-based)セッション・・・ある利用者が他の利用者を招待し、招待された利用者は参加するか否かを判断する。
・応募制(joiner-based)セッション・・・ある利用者がセッションを創設する。他の利用者はセッションの一覧を確認し、参加を申し込む。
・どちらもセッションの存在を告知するのに一手間必要。
・セッションの参加の申し込みも大変。
・セッションの初期費用が高い。
・セッション関連機能は、各アプリケーションにとって付随的で余分な機能に過ぎない。(この機能がアプリケーション内部に埋め込まれているなら)
・explicit なモデルでは、非公式の協働は為され難い。

★「"mediaspace" application」
・利用者等に直接通信を行わせるため、セッション管理の問題を全て避けて通ることができるという利点あり。
・「communication-oriented」なシステムならこれで良い。しかし、通信を目的としないアプリケーションにとっては、その種のアプリケーションを前提としたシステムは使いやすいものではない。
・そこで、通信を主としないアプリケーションのためのセッション・マネジメントの枠組みを作ることに意義が生まれる。
・これは、explicit session management を完全に置き換えるものではないが、同方式の苦手とする部分を補うものになる。

★「implicit session management」とは何か
・事情を知っている少数の集まりの場合は、大抵、招待や入場制限は必要ない。
・協働作業の対象物を開く動作そのものを以って、潜在的には協働作業が始まったものと見做す(協働作業の参加者の待合せが始まったと見做す)。例えば、複数の利用者が同時にあるファイルを開いたら、システムは協働作業が起こりうること(the potential for collaboration)を検知する。セッションの参加希望者は、開催中のセッションの一覧を確認する必要等は無い。
・協働の可能性とは次のようなもの。例えば、図書館の本の裏についている貸し出しカードを見て、そこに書かれている名前を確認した場合、確認者は自分と興味関心を同じくする人物に対して、協働作業を持ちかけても良いし、持ちかけなくても良い、というようなこと。待合せ(rendezvous)は、共有資源(共通の目的物)を利用する。
・「implicit session management」の利点は、明示的なセッション創設、セッションの命名、段階の確認(browsing phase通信の段階?)の手間(overhead)がかからないこと。
・explicit session management の「initiator-based」「joiner-based」に対して、「artifact-based」である。
・ここまで述べたことは、利用者視点から見た「implicit session management」の姿である。

★「implicit session management」の実装のために(その1)
・アプリケーションが自動的に implicit session management の機能の恩恵を受けられるようにするには、システム側から見て、どのような機能の実装が要るのか。
・アプリケーションの「activity information」をシステム側で取得できる必要がある。

★「activity information」とは何か
・ネットワークを跨いで実行されている作業の詳細情報。以下のもの。
・システム上に存在する利用者。
・利用者等が作業しているアプリケーションもしくはタスク。
・同アプリケーション・同タスクが操作・使用しているデータ・オブジェクト。

★「activity information」の識別
・利用者を一意に表す識別子を使用。
・アプリケーションを一意に表す識別子を使用。
・データの名前空間を表す「namespace identifier」と、その空間においてデータを一意に表す識別子「name」を使用。あるファイルシステムの中にあるファイル、あるデータベースの中にあるデータなど、データ・オブジェクトは意味空間(semantics of use and representation)を指定しなければ、一意に特定できない。

★「implicit session management」の実装のために(その2)
・セッションに参加したいアプリケーションは、「activity information」を公表・発行(publish)しなければならない。セッション・マネジメント・サーヴィスは、協働が起こり得ることを自動的に検知し、利用者やアプリケーションの設定に従って、適切な「action」をとる。
・利用者識別子、アプリケーション識別子、データ名前空間識別子、データ名識別子の組みで表される「activity」が複数観測され、その中の2つの「activity」でデータ・オブジェクトのトークン(名前空間と名前)が一致する場合、セッション・マネジメント・サーヴィスは、利用者が協働を始められるように準備する。例えば、2人の利用者の同一ファイルを操作していることが分かった場合、セッション・マネジメント・サーヴィスはこれを利用者等に告知する。利用者は、一方が声を掛け、他方が応じれば協働を始めることが出来る。
☆アプリケーションあるいは協働環境の附属機能として「policy controls」の仕組みが必要。「implicit session management」は透明なので、アプリケーションが自動的且つ強制的にセッションに参加させられないように、利用者が色々設定できなければならない。

★「Intermezzo」
・Intermezzo は、協働を支援する環境である。
・アプリケーション中心の開発ではなく、環境中心の開発に適した新しいセッション・マネジメントのモデルは「implicit session management」モデルであり、同モデルに則ってセッション管理を実装したものが「Intermezzo」である。

カレンダー

06 2020/07 08
S M T W T F S
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 31

最新コメント

[04/05 NONAME]

ブログ内検索

広告

バーコード

広告