web-dev-qa-db-ja.com

armhfのクロスコンパイルと静的ライブラリのインストール

クロスコンパイルdockerインスタンスをセットアップしました。一言で言えば、私は

apt-get update
apt-get install binutils-multiarch

dpkg --add-architecture armhf
# Manually add correct armhf repositories to /etc/apt/sources.list
apt-get update
apt-get install libudev-dev:armhf

この最後のステップで、次のエラーが表示されます。

The following packages have unmet dependencies:
libudev-dev:armhf : Depends: libacl1:armhf (>= 2.2.51-8) but it is not going to be installed
                    Depends: libblkid1:armhf (>= 2.19.1) but it is not going to be installed
                    Depends: libc6:armhf (>= 2.17) but it is not going to be installed
                    Depends: libgcc1:armhf (>= 1:3.5) but it is not going to be installed
                    Depends: libkmod2:armhf (>= 5~) but it is not going to be installed
                    Depends: libselinux1:armhf (>= 2.0.65) but it is not going to be installed
                    Depends: libudev1:armhf (= 229-4ubuntu4) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

libc6:armhfは現在インストールされているAMD64 libc6と競合し、このパッケージを上書きするため、これらを手動でインストールすることはオプションではありません。リンクできるようにlibudev:armhfパッケージをセットアップしたいだけです。

/ etc/apt/sources.list

deb [Arch=AMD64] http://archive.ubuntu.com/ubuntu/ xenial main restricted
deb [Arch=armhf] http://ports.ubuntu.com/ubuntu-ports/ xenial main restricted

deb [Arch=AMD64] http://archive.ubuntu.com/ubuntu/ xenial-updates main restricted

deb [Arch=AMD64] http://archive.ubuntu.com/ubuntu/ xenial universe
deb [Arch=AMD64] http://archive.ubuntu.com/ubuntu/ xenial-updates universe

deb [Arch=AMD64] http://security.ubuntu.com/ubuntu/ xenial-security main restricted
deb [Arch=AMD64] http://security.ubuntu.com/ubuntu/ xenial-security universe
deb [Arch=AMD64] http://security.ubuntu.com/ubuntu/ xenial-security multiverse

apt-cache policy libudev-dev:{AMD64,armhf}を実行すると、次が出力されます。

libudev-dev:
  Installed: (none)
  Candidate: 229-4ubuntu21.4
  Version table:
     229-4ubuntu21.4 500
        500 http://archive.ubuntu.com/ubuntu xenial-updates/main AMD64 Packages
     229-4ubuntu21.1 500
        500 http://security.ubuntu.com/ubuntu xenial-security/main AMD64 Packages
     229-4ubuntu4 500
        500 http://archive.ubuntu.com/ubuntu xenial/main AMD64 Packages
libudev-dev:armhf:
  Installed: (none)
  Candidate: 229-4ubuntu4
  Version table:
     229-4ubuntu4 500
        500 http://ports.ubuntu.com/ubuntu-ports xenial/main armhf Packages
2
psiphi75

ステップ1-ターミナルを開きます:

押す Ctrl+Alt+T

ステップ2-バックアップ:

実行:

Sudo cp /etc/apt/sources.list /etc/apt/sources.list.old

ステップ3-エディターを開きます。

実行:

Sudo gedit /etc/apt/sources.list

必要に応じて、他のエディターを使用できます。

ステップ4-sources.listの編集:

ここですべてを削除して、これらを追加します。

deb [Arch=AMD64] http://archive.ubuntu.com/ubuntu/ xenial main multiverse restricted universe
deb [Arch=armhf] http://ports.ubuntu.com/ubuntu-ports/ xenial main multiverse restricted universe
deb [Arch=armhf] http://ports.ubuntu.com/ubuntu-ports/ xenial-updates main multiverse restricted universe
deb [Arch=AMD64] http://archive.ubuntu.com/ubuntu/ xenial-updates main multiverse restricted universe
deb [Arch=AMD64] http://security.ubuntu.com/ubuntu/ xenial-security main multiverse restricted universe

保存して終了。

ステップ5-リポジトリインデックスを更新します。

実行:

Sudo apt update

ステップ6-armhfアーキテクチャのlibudev-devをインストールします。

実行:

Sudo apt install libudev-dev:armhf

説明: Multiarchパッケージは、すべてのアーキテクチャに同じバージョンでインストールする必要があります。したがって、libudev-dev:armhfにはバージョン229-4ubuntu21.4が必要ですが、現在のリポジトリ構成にはこのバージョンが含まれていません。そのため、このバージョンがサポートされているxenial-updatesの行を追加する必要があります。

チャンネルを追加するために提案されたその他については、何か問題が発生した場合に備えて追加することをお勧めします。

2
Olimjon