Howto

クロス開発用ライブラリをインストールする方法

Atmark Distや開発環境(ATDE)に含まれていないライブラリを使いたいときに役に立つ方法です。

Atmark Distにはいろいろなライブラリが含まれています。また、Armadilloの標準開発環境であるATDEにも、デフォルトイメージを作成するのに必要なクロス開発用ライブラリがインストールされています。しかしながら、オープンソースのライブラリ全てを入れるわけにはいきません1。使いたいライブラリがAtmark Distや開発環境に含まれていなくても、この方法さえ知っていれば、使えるライブラリがグンと増えます。なお、ライブラリではなく、ビルド済みのアプリケーションプログラムを使いたい場合は、「Debianのパッケージに含まれるコンパイル済みのバイナリをArmadilloで動作させる方法」を参照してください。

ソースファイルを取得して自分でコンパイルしても良いのですが、ArmadilloはDebianとバイナリ互換になっているので、DebianのARM用パッケージを使うと簡単です。バイナリパッケージをダウンロードし、開発環境にインストールするまでを紹介します。Debianのパッケージを使うので、開発環境にもDebianを使用しますが、他の環境でも特に難しい事はないと思います。他の環境でDebianパッケージを使用するには、「クロス開発ツールチェーンをdebからrpmパッケージに変換する」を参照してください。

クロス開発用ライブラリを検索

まず、目的のライブラリのクロス開発用が、既に提供されていないかを確認します。


[PC~]$ apt-get update
[PC~]$ apt-cache search arm..-cross

ATDE5で上記のコマンドを実行すると、armel, armhf アーキテクチャ用のクロス開発用パッケージが表示されます。 ここで表示されるパッケージは apt-get install コマンドでATDEにインストールすれば使用できます。

ARM用のアーキテクチャには、armel, armhf, arm の三種類があります。 全てARM用のアーキテクチャですが、ABIとFPUサポートの有無が異なります。

arm は古いABIである OABI が使われています。

armel と armhf は、新しい EABI が使われており、FPUサポートの有無 によって armel (FPUなし) と armhf (FPUあり) に分かれています。

クロス開発用ライブラリが提供されていない場合

提供されていないパッケージは、以下の方法でインストールすることが可能です。

まず、Debianのパッケージサイトで必要なライブラリのバイナリ・パッケージを検索します。 下表を参考に、お使いの Armadillo と開発環境に対応したディストリビューション、アーキテクチャのパッケージをダウンロードしてください。

製品 開発環境 ディストリビューション アーキテクチャ
Armadillo-810
Armadillo-840
ATDE5 Debian 7.0 wheezy armhf
Armadillo-IoT
Armadillo-Box WS1
ATDE5 Debian 7.0 wheezy armel
Armadillo-420 ATDE5 Debian 7.0 wheezy armel
ATDE3 Debian 5.0 lenny * armel
Armadillo-440
Armadillo-460
ATDE3 Debian 5.0 lenny * armel
Armadillo-500
Armadillo-500 FX
Armadillo-300
Armadillo-9
Armadillo-210
Armadillo-220
Armadillo-230
Armadillo-240
ATDE2 Debian 4.0 etch * arm

* 2015年11月現在、ATDE3(Debian 5.0 lenny)、ATDE2(Debian 4.0 etch)のパッケージはDebianのパッケージサイトからは検索できませんので、アーカイブからパッケージを探す必要があります。

ダウンロードに成功したらdpkg-crossコマンドを使用してパッケージをクロス開発用に変換します。作成されたパッケージのファイル名にはcrossという文字が入るので、容易に判別できると思います。

最後にdpkgコマンドで作成したパッケージをインストールします。

実際の手順をlibssl0.9.7を例に説明します。

●作成したパッケージをインストール


[PC ~]$ wget http://ftp.jp.debian.org/debian/pool/main/o/openssl/libssl0.9.7_0.9.7e-3_arm.deb
...
[PC ~]$ ls
libssl0.9.7_0.9.7e-3_arm.deb
[PC ~]$ dpkg-cross -b -aarm libssl0.9.7_0.9.7e-3_arm.deb
Building libssl0.9.7-arm-cross_0.9.7e-3_all.deb
[PC ~]$ ls
libssl0.9.7-arm-cross_0.9.7e-3_all.deb  libssl0.9.7_0.9.7e-3_arm.deb
[PC ~]$ su
Password:
[PC ~]# dpkg -i libssl0.9.7-arm-cross_0.9.7e-3_all.deb
Selecting previously deselected package libssl0.9.7-arm-cross.
(Reading database ... 13060 files and directories currently installed.)
Unpacking libssl0.9.7-arm-cross (from libssl0.9.7-arm-cross_0.9.7e-3_all.deb) ...
Setting up libssl0.9.7-arm-cross (0.9.7e-3) ...
[PC ~]#

通常はこれでインストールでますが、ライブラリの中にはpkg-configパッケージを必要とするものがあり、この場合は依存関係が解決できずにインストールに失敗します。

pkg-config は、ライブラリやアプリケーションをコンパイルするときに必要とされるコンパイルオプションを出力するための補助的なツールです。パッケージと一緒にインストールされる .pc ファイルを参照して、必要なオプションの出力を行っています。

このため開発PC用のpkg-configをインストールして、ARM用クロスパッケージの.pc ファイルが置かれる、/usr/arm-linux/lib/pkgconfigをPKG_CONFIG_PATH環境変数に指定すれば、クロス環境向けにpkg-configが使えるようになり、クロス用をインストール必要はありません。ダミーのクロス用pkg-configパッケージをインストールして、この依存関係さえ解決すれば十分です。以下に、ダミーパッケージをインストールする手順を記載します。

●ダミーパッケージをインストール


[PC ~]# apt-get install equivs
[PC ~]# apt-get install pkg-config
[PC ~]# exit
[PC ~]$ wget http://download.atmark-techno.com/misc/softwaredesign/chapter5/mkXdummy
[PC ~]$ chmod 755 mkXdummy
[PC ~]$ ./mkXdummy pkg-config
...
[PC ~]$ ls pkg-config*
pkg-config-arm-cross_1.0_all.deb
[PC ~]$ su -
Password:
[PC ~]# dpkg -i pkg-config-arm-cross_1.0_all.deb

  1. なにせ、Debianのパッケージだけでも24,000個以上あるのです