一个易用的交叉编译环境。可以编译x86,龙芯 mips,飞腾 arm,riscv等cpu的程序。并且是跨发行版的,各个linux操作系统厂商下都可以用。类似holy-build-box、crossbuild,但是支持交叉编译更多的cpu。更容易安装软件。
基于Gentoo,全部由源代码编译。目前使用 glibc 2.17, bintuils 2.26, gcc 10.2.0, kernel 3.18, python 3.11, nodejs 18.
用它编译的程序从 CentOS7 到 Ubuntu 16.04都能用,方便适配各种linux发行版。
使用这个方式编译,编译mips,arm程序不需要相关硬件,都在普通x86_64下,也不是使用模拟机。编译速度比较快,同时里面带有程序级的模拟,在编译过中创建的程序也可以直接执行,所以基本不需要改造编译脚本。
编译完也可以直接运行测试。
https://github.com/cross-any/cross-any/
https://gitee.com/crossany/cross-any/
旧版
Check https://hub.docker.com/r/crossany/crossany/tags for the tags. We have some prebuilt tags for mips,arm,pwoerpcc,x86.
Use the tag you need in docker commands. For example crossany/crossany:latest, crossany/crossany:mips64el-latest, crossany/crossany:mips64el-2023. crossany/crossany:latest or crossany/crossany:date 只包含基本Gentoo环境. crossany/crossany:arch-date 包含编译好的交叉编译环境.
目前已经自动编译的包括:
cross-any is to enable an execution of different multi-architecture containers by QEMU [1] and binfmt_misc [2]. Run with privileged to register binfmt_misc.
docker run --rm --privileged crossany/crossany:mips64el-2023 /register --reset -p yes
#docker run --rm --privileged crossany/crossany:aarch64-2023 /register --reset -p yes
#docker run --rm --privileged crossany/crossany:x86_64-2023 /register --reset -p yes
#docker run --rm --privileged crossany/crossany:loongarch64-2023 /register --reset -p yes
#docker run --rm --privileged crossany/crossany:riscv64-2023 /register --reset -p yes
#We use shared gentoo portage, you may need to copy that to the container /var/db/repos/gentoo if your docker version does not support volumes-from
docker run -ti -v $PWD:/root/host crossany/crossany:mips64el-2023 bash
#docker run -ti -v $PWD:/root/host crossany/crossany:aarch64-2023 bash
#docker run -ti -v $PWD:/root/host crossany/crossany:x86_64-2023 bash
#docker run -ti -v $PWD:/root/host crossany/crossany:loongarch64-2023 bash
#docker run -ti -v $PWD:/root/host crossany/crossany:riscv64-2023 bash
docker run -ti -v $PWD:/root/host crossany/crossany:mips64el-2023 bash
#docker run -ti -v $PWD:/root/host crossany/crossany:aarch64-2023 bash
#docker run -ti -v $PWD:/root/host crossany/crossany:x86_64-2023 bash
#docker run -ti -v $PWD:/root/host crossany/crossany:loongarch64-2023 bash
#docker run -ti -v $PWD:/root/host crossany/crossany:riscv64-2023 bash
#docker run -ti --privileged -v $PWD:/root/host crossany/crossany:x86_64-2023 bash
Run with --privileged is suggested.
Or run with privileged to use chroot in docker
docker run -ti --privileged -v $PWD:/root/host crossany/crossany:mips64el-2023 bash
docker run --rm --privileged crossany/crossany:mips64el-2023 /register --reset -p yes
#docker run --rm --privileged crossany/crossany:aarch64-2023 /register --reset -p yes
#docker run --rm --privileged crossany/crossany:x86_64-2023 /register --reset -p yes
#docker run --rm --privileged crossany/crossany:loongarch64-2023 /register --reset -p yes
#docker run --rm --privileged crossany/crossany:riscv64-2023 /register --reset -p yes
#We use shared gentoo portage, you may need to copy that to the container /var/db/repos/gentoo if your docker version does not support volumes-from
docker run -ti -v $PWD:/root/host crossany/crossany:mips64el-2023 bash
#docker run -ti -v $PWD:/root/host crossany/crossany:aarch64-2023 bash
#docker run -ti -v $PWD:/root/host crossany/crossany:x86_64-2023 bash
#docker run -ti -v $PWD:/root/host crossany/crossany:loongarch64-2023 bash
#docker run -ti -v $PWD:/root/host crossany/crossany:riscv64-2023 bash
/cross/localrepo/crossit mips64el-crossany-linux-gnuabi64
/cross/localrepo/crossit aarch64-crossany-linux-gnu
/cross/localrepo/crossit x86_64-crossany-linux-gnu
/cross/localrepo/crossit loongarch64-crossany-linux-gnu
/cross/localrepo/crossit riscv64-crossany-linux-gnu
source /usr/mips64el-crossany-linux-gnuabi64/active
#source /usr/aarch64-crossany-linux-gnu/active
#source /usr/x86_64-crossany-linux-gnu/active
#source /usr/loongarch64-crossany-linux-gnu/active
#source /usr/riscv64-crossany-linux-gnu/active
#do the build just as normal
#run ldconfig and /usr/mips64el-crossany-linux-gnuabi64/sbin/ldconfig if you meet lib search issue
Most utils package can be install in the container directly before active cross env such make,ptotoc ... , for example:
emerge -nuav make
lib for build can be install after active the cross env or using /usr/bin/$crossenv-emerge, for example
Before active cross env:
USE=static-libs /usr/bin/$crossenv-emerge -avun zlib
Or after active:
USE=static-libs emerge -avun zlib
Clone https://github.com/gentoo/gentoo.git and checkout by date
git clone https://github.com/gentoo/gentoo.git
git checkout `git rev-list -n 1 --first-parent --before="2018-01-01 00:00" master`
mkdir /cross/localrepo/$the_category/
cp -avf gentoo/$the_category/$the_package /cross/localrepo/$the_category/
ebuild /cross/localrepo/$the_category/xxx.ebuild manifest
GCC_VERSION=9.3.0-r1 /cross/localrepo/crossit mips64el-c17gcc9-linux-gnuabi64
Other variables:
GCC_VERSION=${GCC_VERSION:=10.2.0-r2} #9.3.0-r1
GLIBC_VERSION=${GLIBC_VERSION:=2.17} #2.19-r2
KERNEL_VERSION=${KERNEL_VERSION:=3.18}
BINUTILS_VERSION=${BINUTILS_VERSION:=2.26-r1}
Find gentoo package versions at /var/db/repos/gentoo/sys-libs/glibc, /var/db/repos/gentoo/sys-devel/binutils, /var/db/repos/gentoo/sys-devel/gcc, /var/db/repos/gentoo/sys-kernel/linux-headers/ and /cross/localrepo.
export LDFLAGS="$LDFLAGS -static-libstdc++ -static-libgcc"
sed -i "s/rsync.gentoo.org/mirrors.tuna.tsinghua.edu.cn/g" /usr/share/portage/config/repos.conf
grep ^GENTOO_MIRRORS /etc/portage/make.conf>/dev/null 2>/dev/null || echo GENTOO_MIRRORS="https://mirrors.tuna.tsinghua.edu.cn/gentoo" >> /etc/portage/make.conf
grep ^gnu /etc/portage/mirrors >/dev/null 2>/dev/null|| echo gnu https://mirrors.tuna.tsinghua.edu.cn/gnu >> /etc/portage/mirrors
grep ^GENTOO_MIRRORS /usr/$crossenv/etc/portage/make.conf >/dev/null 2>/dev/null || grep ^GENTOO_MIRRORS /etc/portage/make.conf >> /usr/$crossenv/etc/portage/make.conf
/bin/cp -avf /etc/portage/mirrors /usr/$crossenv/etc/portage/mirrors
openresty build and libreoffice build preparation script in examples folder
time bash /cross/localrepo/examples/openresty.sh
real 3m16.150s
user 5m30.568s
sys 0m46.301s
file /opt/openresty/nginx/sbin/nginx
/opt/openresty/nginx/sbin/nginx: ELF 64-bit LSB pie executable, MIPS, MIPS-III version 1 (SYSV), dynamically linked, interpreter /lib64/ld.so.1, for GNU/Linux 2.6.16, with debug_info, not stripped
/opt/openresty/nginx/sbin/nginx -t
nginx: the configuration file /opt/openresty/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /opt/openresty/nginx/conf/nginx.conf test is successful
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。