2008/09/09

Marble

先日、国土数値情報の空港データをインポートするためのPerlスクリプトがLinux上で動かないという問い合わせがありました。私自身はWindows上でしか使ったことが無かったので、OpenStreetMapの日本語メーリングリスト (talk-ja) で尋ねてみると、鉄道データ用のスクリプトFedora8/9とCentOS5.2で特に問題無く動いているとのこと。私も、Mapnikを動かして以来使っていなかったUbuntu8.04で試してみました。久々にUbuntuを使う為、無線LANの調子が悪い中を170MBのファイルをダウンロードしてVMware Playerをアップデートしたり、Ubuntuに224個のアップデートを適用したりしたのですが、CPANから"XML::Simple"をインストールしなければならなかったことを除けば、空港データ用のスクリプトも特に問題無く動きました。

意外にあっさり終わってしまったなと思っていた時に、talk-jaで話題になっていたMarbleのことを思い出しました。Marbleというアプリケーションは、(衛星画像や地図が表面に貼り付けられた)地球をGoogle Earthのようにグリグリと回せるもので、OpenStreetMapの地図の表示もできます。

talk-jaでは「KDE Marble」と紹介されていたのでLinuxをあまり使ったことの無い私はUbuntuには関係の無い話だと思っていましたが、Windows版Qtを使っており、もしかしたらと思って公式サイトを眺めているとQt-onlyでもコンパイルできることが分かったので、私もMarbleを触ってみることにしました。

せっかくなので、MarbleをQt-onlyアプリケーションとしてコンパイルして動かすまでに試行錯誤したことを書いておこうと思います。



1. Qtの導入

QtはMapnikViewerを動かす為に入れてあったので、今回は無し。その時のメモはこちら

2. ソースコードの入手

ソースコード (.tar.gzファイル) はダウンロードページから入手できますが、コンパイルの手引きのページではSVNからの入手を奨めているので、今回はSVNから安定版を入手することにしました。
vmuser@vmuser-desktop:~$ sudo su
[sudo] password for vmuser:
root@vmuser-desktop:/home/vmuser# cd /usr/local/src
root@vmuser-desktop:/usr/local/src# svn co svn://anonsvn.kde.org/home/kde/branches/KDE/4.1/kdeedu/marble


3. cmakeのインストール

cmakeは使ったことが無く、Ubuntu8.04にも入っていなかったのでインストールしました。
vmuser@vmuser-desktop:~$ sudo su
[sudo] password for vmuser:
root@vmuser-desktop:/home/vmuser# apt-get install cmake
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
libestraier8 libqdbm14
これらを削除するには 'apt-get autoremove' を利用してください。
以下のパッケージが新たにインストールされます:
cmake
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
4808kB のアーカイブを取得する必要があります。
この操作後に追加で 12.4MB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com hardy/main cmake 2.4.7-1build1 [4808kB]
4808kB を 5min24s で取得しました (14.8kB/s)
未選択パッケージ cmake を選択しています。
(データベースを読み込んでいます ... 現在 141371 個のファイルとディレクトリがインストールされています。)
(.../cmake_2.4.7-1build1_i386.deb から) cmake を展開しています...
cmake (2.4.7-1build1) を設定しています ...


4. buildディレクトリの作成

buildディレクトリを作成して移動します。
root@vmuser-desktop:/usr/local/src# cd ../bin
root@vmuser-desktop:/usr/local/bin# mkdir marble-build
root@vmuser-desktop:/usr/local/bin# cd marble-build
※ディレクトリの作成場所はコンパイルの手引きのページに書いてあるものと異なっています。

5. cmakeの実行

cmakeを実行します。
root@vmuser-desktop:/usr/local/bin/marble-build# cmake -DQTONLY=ON ../../src/marble
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Check size of void*
-- Check size of void* - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
WARNING: This project requires version 2.4.8 of CMake. You are running version 2.4.7.

CMake Error: Qt qmake not found!
-- Configuring done
qmakeが見付からないと怒られたので、cmakeをやり直しました。
root@vmuser-desktop:/usr/local/bin/marble-build# cmake -DQTONLY=ON -DQT_QMAKE_EXECUTABLE=/usr/local/Trolltech/Qt-4.3.4/bin/qmake ../../src/marble
WARNING: This project requires version 2.4.8 of CMake. You are running version 2.4.7.

-- Looking for Q_WS_X11
-- Looking for Q_WS_X11 - found
-- Looking for Q_WS_MAC
-- Looking for Q_WS_MAC - not found.
-- Looking for Q_WS_WIN
-- Looking for Q_WS_WIN - not found.
-- Found Qt-Version 4.3.4

-- Not building with Gpsd Support
-- not building with gpsd support
-- Configuring done
-- Generating done
-- Build files have been written to: /usr/local/bin/marble-build

root@vmuser-desktop:/usr/local/bin/marble-build# ls
CMakeCache.txt Makefile src
CMakeFiles cmake_install.cmake svnscript.cmake
CPackConfig.cmake cmake_uninstall.cmake tests
CPackSourceConfig.cmake data

root@vmuser-desktop:/usr/local/bin/marble-build#
なんかCMakeのバージョンが古いという警告メッセージが出ていますけど、CMakeはさっきインストールしたばかりでどうしたらいいのか分からないので、そのまま進むことにしました。

6. makeの実行

makeを実行します。
root@vmuser-desktop:/usr/local/bin/marble-build# make
出力メッセージは長いので省略。

7. make installの実行

make installを実行します。
root@vmuser-desktop:/usr/local/bin/marble-build# make install
出力メッセージは長いので省略。

8. marbleの実行

marbleを実行します。
vmuser@vmuser-desktop:~$ marble
marble: error while loading shared libraries: libQtCore.so.4: cannot open shared object file: No such file or directory
vmuser@vmuser-desktop:~$
動きません。ホームディレクトリにlibQtCore.so.4のシンボリックリンクを作ってみましたが、状況は変わらず駄目でした。

cmakeの段階でQT_QTCORE_LIBRARYを指定してやり直し。
root@vmuser-desktop:/usr/local/bin/marble-build# cmake -DQTONLY=ON -DQT_QMAKE_EXECUTABLE=/usr/local/Trolltech/Qt-4.3.4/bin/qmake -DQT_QTCORE_LIBRARY=/usr/local/Trolltech/Qt-4.3.4/lib/libQtCore.so.4.3.4 ../../src/marble > cmakelog.txt
WARNING: This project requires version 2.4.8 of CMake. You are running version 2.4.7.


root@vmuser-desktop:/usr/local/bin/marble-build#
状況は変わらず、これも駄目。

検索して少し調べてみると、環境変数でLD_LIBRARY_PATHを指定すると良いようです。 .bashrc の末尾に追加して試してみると、
LD_LIBRARY_PATH=/usr/local/Trolltech/Qt-4.3.4/lib
export LD_LIBRARY_PATH
今度は libmarblewidget.so.6 が見付からないと怒られてしまいましたので、.bashrc を修正すると、
LD_LIBRARY_PATH=/usr/local/Trolltech/Qt-4.3.4/lib:/usr/local/bin/marble-build/src/lib
export LD_LIBRARY_PATH
解決!
Atom