クロスコンパイル!

投稿者: | 10月 2, 2022

DevTerm R-01が笑えるくらいもっさりなので、クロスコンパイルを導入することに。

以前、EdgeRouterで調べたのがこれ。

https://www.blog.slow-fire.net/2021/04/04/%e3%83%a0%e3%82%ab%e3%81%a4%e3%81%8fw-edgerouter-x%e3%80%81edgerouter-4-6%e3%81%ae%e6%83%85%e5%a0%b1%e3%81%8c%e3%81%aa%e3%81%84%e3%80%82%e3%80%80%e3%82%af%e3%83%ad%e3%82%b9%e3%82%b3%e3%83%b3/

今回参考にさせていただいたページは以下。

https://qiita.com/tetsu_koba/items/9bdcb59f912efbff3128

g++を指定して入れるのがミソらしい。

その流れでクロスコンパイラーを調べてみた。なんでもいけそう。RISC-Vもあった。このリストが俗に言う現行サポートアーキテクチャーなのか。DEC Alphaとかm68kとかあるw

g++-10/focal-updates,focal-security 10.3.0-1ubuntu1~20.04 amd64
g++-10-aarch64-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-alpha-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-arm-linux-gnueabi/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-arm-linux-gnueabihf/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-hppa-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-i686-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-m68k-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-mips-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-mips64-linux-gnuabi64/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-mips64el-linux-gnuabi64/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-mipsel-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-mipsisa32r6-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-mipsisa32r6el-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-mipsisa64r6-linux-gnuabi64/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-mipsisa64r6el-linux-gnuabi64/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib/focal-updates,focal-security 10.3.0-1ubuntu1~20.04 amd64
g++-10-multilib-arm-linux-gnueabi/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-arm-linux-gnueabihf/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-i686-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-mips-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-mips64-linux-gnuabi64/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-mips64el-linux-gnuabi64/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-mipsel-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-mipsisa32r6-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-mipsisa32r6el-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-mipsisa64r6-linux-gnuabi64/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-mipsisa64r6el-linux-gnuabi64/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-powerpc-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-powerpc64-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-s390x-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-sparc64-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-multilib-x86-64-linux-gnux32/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-powerpc-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-powerpc64-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-powerpc64le-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-riscv64-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-s390x-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-sh4-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-sparc64-linux-gnu/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64
g++-10-x86-64-linux-gnux32/focal-updates,focal-security 10.3.0-1ubuntu1~20.04cross1 amd64

以下のようにして、動かせた。テスト環境は、ARM64 (VMware Fusion Tech Preview 22H2 Ubuntu 20.04.5)とx86_64のUbuntu 20.04.5。

aarch64

apt -y install g++-aarch64-linux-gnu qemu-user-binfmt
mv /lib/aarch64-linux-gnu /lib/aarch64-linux-gnu.orig
ln -s /usr/aarch64-linux-gnu/lib/ /lib/aarch64-linux-gnu
ln -s /lib/aarch64-linux-gnu/ld-2.21.so /lib/ld-linux-aarch64.so.1

RISC-V

apt -y install g++-riscv64-linux-gnu  qemu-user-binfmt
mv /lib/riscv64-linux-gnu /lib/riscv64-linux-gnu.orig
ln -s /usr/riscv64-linux-gnu/lib /lib/riscv64-linux-gnu
ln -s /lib/riscv64-linux-gnu/ld-2.31.so /lib/ld-linux-riscv64.so.1
ln -s /lib/riscv64-linux-gnu/ld-linux-riscv64-lp64d.so.1 /lib/ld-linux-riscv64-lp64d.so.1

x86_64(わかるまでちょっと厄介だった。)

apt -y install g++-x86-64-linux-gnu qemu-user-binfmt
mkdir /lib64
ln -s /usr/x86_64-linux-gnu/lib64/ /lib64/x86_64-linux-gnu
ln -s /lib64/x86_64-linux-gnu/ld-linux-x86-64.so.2 /lib64/ld-linux-x86-64.so.2
mv /lib/x86_64-linux-gnu /lib/x86_64-linux-gnu.orig
ln -s /usr/x86_64-linux-gnu/lib /lib/x86_64-linux-gnu

まぁ、動かないときは、何かのリンク忘れなので、比較的簡単に動いた。

となるとやりたくなるのは、どこでコンパイルすればいいのかという話になりそうw

コメントを残す