Armadilloフォーラム

ATDE7でのlibcurl4導入方法

kumikoohashi

2019年10月9日 19時22分

お世話になっております。大橋です。

ATDE7で、Armadillo IoT G3用にCのプログラムをクロスコンパイルするため、
libcurl4-openssl-devをクロス開発用に入れようとしましたが、
dbkg-crossで変換して入れようとするも依存のcurl4のインストールで、更に依存を深く辿ることになりました。
しかしPC用と競合して入らないものもあり、諦めました。

結局、curl4は、こちらを見てインストールしました。
https://users.atmark-techno.com/forum/armadillo/2817

しかし追加ライブラリ、curl.hの場所に
/usr/lib/arm-linux-gnueabihfと/usr/arm-linux-gnueabihf/include
を指定して、arm-linux-gnueabihf-gccでコンパイルするのですが、
`*****' に対する定義されていない参照です が大量に出ます。
一つずつ解決することが躊躇われる量です。

ATDE7で、-lcurlをつけてG3用にコンパイルできるようにするためには
どう環境を作るのが最善なのでしょうか。

よろしくお願い申し上げます。

コメント

古関です。

> ATDE7で、-lcurlをつけてG3用にコンパイルできるようにするためには
> どう環境を作るのが最善なのでしょうか。

下記のコマンドでインストール、ビルドできないでしょうか。

sudo apt-get install libcurl4-openssl-dev:armhf

古関様

アドバイスありがとうございます。

> sudo apt-get install libcurl4-openssl-dev:armhf

実は昨日もはじめにこれでインストールしようとしたのですが、同じような依存や競合で失敗しました。

PC用のものを削除してから入れ直してもエラーになりましたが、そもそも、PC用も使用したいです。

処理中にエラーが発生しました:
/tmp/apt-dpkg-install-w6WJ2J/15-libk5crypto3_1.15-1+deb9u1_armhf.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

実機に書き込んでからセットアップ時にコンパイルするようにした方が無難でしょうか。

libcurlはmultiarch対応が不十分なのでpkg-configから呼び出される
/usr/bin/curl-config が armhf版とamd64版とで同じパスにインストール
されてしまします。

決定的な解決方法は無いので、ワークアラウンドを考えてみました。

先の質問で直接include pathを指定されているようなので、
pkg-configは使っていないということであれば、有効な方法です。

$ sudo apt install libcurl4-openssl-dev

あるいは

$ sudo apt install libcurl4-openssl-dev:armhf

のどちらかが成功して、後から実行した方がエラーしている状態の下で

$ sudo mv /usr/bin/curl-config /usr/bin/curl-config.back

この後に、失敗した方をインストールすると成功するはずです。

ちなみに libcurl4-openssl-dev:armhf で入るヘッダのパスは
/usr/arm-linux-gnueabihf/include/ ではなく
/usr/include/arm-linux-gnueabihf/ になります。

尚、curl-config を変更しているのでビルド時に pkg-config で
-Lと-Iのオプションを作って居る場合、back名前を変えた方のライブラリの
パスが間違った結果になります。その場合は都度mvして名前を戻す必要があります。
しかし、直接-I, -Lのパスを書いているのであれば、影響ありません。

これは回答ではなく、ちょっとしたtipsです。

アットマークテクノのサンプルやインターネット上の記事などでは未だに、
apt-getが使われていることが多いのですが、ATDE6以降であれば、
私の回答に書いているaptコマンドを使った方が良い事が多いです。

例えば、今回のケースではaptコマンドは/usr/bin/curl-configの上書きによる、
エラーであることを、以下のようにデフォルトで出力されて原因がわかりやすいです。

dpkg: error processing archive /var/cache/apt/archives/libcurl4-openssl-dev_7.52.1-5+deb9u9_amd64.deb (--unpack):
 trying to overwrite shared '/usr/bin/curl-config', which is different from other instances of package libcurl4-openssl-dev:amd64
dpkg-deb: error: subprocess paste was killed by signal (Broken pipe)
Errors were encountered while processing:
 /var/cache/apt/archives/libcurl4-openssl-dev_7.52.1-5+deb9u9_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

他にも破壊的な依存関係のパッケージをインストールする場合の質問文が
わかりやすくなっています。