一、编译 openssl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 准备阶段 wget --no-check-certificate -c https://www.openssl.org/source/old/1.1.1/openssl-1.1.1o.tar.gz tar -xzf openssl-1.1.1o.tar.gz cd openssl-1.1.1o mkdir build-aarch64 && cd build-aarch64 设置交叉编译环境 export CC=aarch64-linux-gnu-gcc export CXX=aarch64-linux-gnu-g++ export LD=aarch64-linux-gnu-ld export AR=aarch64-linux-gnu-ar export AS=aarch64-linux-gnu-as export RANLIB=aarch64-linux-gnu-ranlib # 假设这些交叉编译工具链安装到了 '/usr/bin' 目录下,这一句不要漏掉 export PATH=/usr/bin:$PATH 编译 aarch64,编译动态库 ../Configure linux-aarch64 --debug \ -DOPENSSL_NO_OPENSSL_MEMORY -DOPENSSL_NO_BUF_FREELISTS \ -DOPENSSL_NO_ASM -DOPENSSL_NO_INLINE_ASM -DOPENSSL_NO_INLINE -DOPENSSL_NO_AUTOLOAD_CONFIG \ -DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_COMP -DOPENSSL_NO_ENGINE -DOPENSSL_NO_STATIC_ENGINE \ -DOPENSSL_NO_HW -DOPENSSL_NO_SSL2 -DOPENSSL_NO_SSL3 -DOPENSSL_NO_TLS1 -DOPENSSL_NO_TLS1_1 \ -DOPENSSL_NO_WEAK_SSL_CIPHERS \ no-tests no-asm no-autoload-config no-deprecated no-zlib no-comp no-engine no-static-engine \ no-ssl2 no-ssl3 no-tls1 no-tls1_1 no-hw no-crypto-mdebug \ --prefix=/data/App/toolchain/target/out_aarch64/openssl-1.1.1o \ --openssldir=/data/App/toolchain/target/out_aarch64/openssl-1.1.1o make depend make -j8 make install # 才可以安装到设置的目录中 编译 x86 export CC=gcc export CXX=g++ export LD=ld export AR=ar export AS=as export RANLIB=ranlib ../Configure linux-x86_64 --debug \ -DOPENSSL_NO_OPENSSL_MEMORY -DOPENSSL_NO_BUF_FREELISTS \ -DOPENSSL_NO_ASM -DOPENSSL_NO_INLINE_ASM -DOPENSSL_NO_INLINE -DOPENSSL_NO_AUTOLOAD_CONFIG \ -DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_COMP -DOPENSSL_NO_ENGINE -DOPENSSL_NO_STATIC_ENGINE \ -DOPENSSL_NO_HW -DOPENSSL_NO_SSL2 -DOPENSSL_NO_SSL3 -DOPENSSL_NO_TLS1 -DOPENSSL_NO_TLS1_1 \ -DOPENSSL_NO_WEAK_SSL_CIPHERS \ no-tests no-asm no-autoload-config no-deprecated no-zlib no-comp no-engine no-static-engine \ no-ssl2 no-ssl3 no-tls1 no-tls1_1 no-hw no-crypto-mdebug \ --prefix=/data/App/toolchain/target/out_x86_64/openssl-1.1.1o \ --openssldir=/data/App/toolchain/target/out_x86_64/openssl-1.1.1o
二、编译 perl
1 2 3 4 5 6 7 8 9 curl -L -O http://www.cpan.org/src/5.0/perl-5.34.0.tar.gz curl -L -O https://github.com/arsv/perl-cross/releases/download/1.3.6/perl-cross-1.3.6.tar.gz tar -zxf perl-5.34.0.tar.gz cd perl-5.34.0 tar --strip-components=1 -zxf ../perl-cross-1.3.6.tar.gz ./configure --prefix=/usr/local/perl-5.34.0 --target=aarch64-linux-gnu -Dldflags="-s -static" -Dusethreads -Duselargefiles -Dusestrict --all-static make -j4 make install
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 交叉编译:https://github.com/arsv/perl-cross # Get perl and perl-cross sources curl -L -O http://www.cpan.org/src/5.0/perl-5.24.1.tar.gz curl -L -O https://github.com/arsv/perl-cross/releases/download/1.1.3/perl-cross-1.1.3.tar.gz # Unpack perl-cross over perl, overwriting Makefile tar -zxf perl-5.24.1.tar.gz cd perl-5.24.1 tar --strip-components=1 -zxf ../perl-cross-1.1.3.tar.gz export CC=aarch64-linux-gnu-gcc export CXX=aarch64-linux-gnu-g++ export LD=aarch64-linux-gnu-ld export AR=aarch64-linux-gnu-ar export AS=aarch64-linux-gnu-as export RANLIB=aarch64-linux-gnu-ranlib # Proceed as usual with most autoconfed packages # 如果创建 build_aarch64 目录的话,configure 的时候会出错 ./configure --target=aarch64-linux-gnu --prefix=/data/App/toolchain/target/out_aarch64/perl-5.24.1 -Duseshrplib make -j10 make install ------- 以下方法编译未成功 wget http://www.cpan.org/src/5.0/perl-5.36.0.tar.gz tar -xzf perl-5.36.0.tar.gz && cd perl-5.36.0 export CC=aarch64-linux-gnu-gcc export CXX=aarch64-linux-gnu-g++ export LD=aarch64-linux-gnu-ld export AR=aarch64-linux-gnu-ar export AS=aarch64-linux-gnu-as export RANLIB=aarch64-linux-gnu-ranlib ./Configure -des -Dusethreads -Dcrosscompile -Dcc=aarch64-linux-gnu-gcc -Dld=aarch64-linux-gnu-ld -Dprefix=/usr/local/perl-5.36.0 aarch64-linux-gnu make sudo make install # 编译的时候出现错误:Your C compiler doesn't seem to be able to compile C99 code 1. 尝试指定编译器使用 GNU C99 扩展。-Dccflags=-std=gnu99 ./Configure -des -Dusethreads -Dcrosscompile -Dcc=aarch64-linux-gnu-gcc -Dld=aarch64-linux-gnu-ld -Dccflags=-std=gnu99 -Dprefix=/data/App/toolchain/target/out_aarch64/perl-5.36.0 aarch64-linux-gnu 不行,依然是这个报错 2. 尝试添加 -Dno_c99 选项来禁用 C99 特性 ../Configure -des -Dusethreads -Dcrosscompile -Dcc=aarch64-linux-gnu-gcc -Dld=aarch64-linux-gnu-ld -Dno_c99 -Dprefix=/data/App/toolchain/target/out_aarch64/perl-5.36.0 aarch64-linux-gnu ../Configure -des -Dusethreads -Dcrosscompile -Dtargetarch=aarch64-linux-gnu -Dcc=aarch64-linux-gnu-gcc -Dld=aarch64-linux-gnu-ld -Dprefix=/data/App/toolchain/target/out_aarch64/perl-5.36.0
三、编译 file
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 wget http://ftp.astron.com/pub/file/file-5.32.tar.gz tar -xzf file-5.32.tar.gz && cd file-5.32 mkdir build export CC=aarch64-linux-gnu-gcc export CXX=aarch64-linux-gnu-g++ export LD=aarch64-linux-gnu-ld export AR=aarch64-linux-gnu-ar export AS=aarch64-linux-gnu-as export RANLIB=aarch64-linux-gnu-ranlib ../configure --host=aarch64-linux-gnu --target=aarch64-linux-gnu --enable-static --disable-shared --prefix=/data/App/toolchain/target/out_aarch64/file-5.32 make -j10 make install 编译出来的 file,查看文件,都是报错:file: could not find any valid magic files! 原因:file 命令需要 magic 文件来确定文件类型。magic 文件通常位于 /usr/share/file/magic 或 /usr/share/misc/magic 目录下。但是,有时也可能将 magic 文件存储在其他位置,具体取决于系统的配置。 使用 file -v 查看默认使用 magic 文件的位置。将编译生成的 share 中的 magic file 拷贝到指定位置即可。
四、编译 libunwind
1 2 3 4 5 6 7 8 9 10 11 12 下载 libunwind 源码 版本 1.6.2 export CC=aarch64-linux-gnu-gcc export CXX=aarch64-linux-gnu-g++ export LD=aarch64-linux-gnu-ld export AR=aarch64-linux-gnu-ar export AS=aarch64-linux-gnu-as export RANLIB=aarch64-linux-gnu-ranlib ../configure --build=x86_64-linux-gnu --host=aarch64-linux-gnu --target=aarch64-linux-gnu --prefix=/data/App/toolchain/target/out_aarch64/libunwind-1.6.2 --enable-shared --disable-static ../configure --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --prefix=/data/App/toolchain/target/out_x86_64/libunwind-1.6.2 --enable-shared --disable-static
五、编译 Graphviz
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 wget https://gitlab.com/api/v4/projects/4207231/packages/generic/graphviz-releases/7.1.0/graphviz-7.1.0.tar.gz tar -xzf graphviz-7.1.0.tar.gz cd graphviz-7.1.0 mkdir build_aarch64 && cd build_aarch64 export CC=aarch64-linux-gnu-gcc export CXX=aarch64-linux-gnu-g++ export LD=aarch64-linux-gnu-ld export AR=aarch64-linux-gnu-ar export AS=aarch64-linux-gnu-as export RANLIB=aarch64-linux-gnu-ranlib ../configure --prefix=/data/App/toolchain/target/out_aarch64/graphviz-7.1.0 --host=aarch64-linux-gnu --target=aarch64-linux-gnu make -j10 make install
六、编译 gcc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 1. x86_64 版本的编译 export CC=gcc export CXX=g++ export LD=ld export AR=ar export AS=as export RANLIB=ranlib export LIBRARY_PATH= ../configure --prefix=/data/App/toolchain/target/out_x86_64/gcc_7.5.0-asan_modidy \ --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu \ --enable-languages=c,c++ \ --disable-multilib make -j8 make install 2. aarch64 版本的编译 wget -c https://ftp.gnu.org/gnu/gcc/gcc-7.5.0/gcc-7.5.0.tar.gz gcc 的依赖库: wget -c https://ftp.gnu.org/gnu/mpfr/mpfr-4.0.1.tar.xz wget -c https://ftp.gnu.org/gnu/gmp/gmp-6.1.2.tar.xz wget -c https://ftp.gnu.org/gnu/mpc/mpc-1.1.0.tar.gz wget -c ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2 wget -c ftp://gcc.gnu.org/pub/gcc/infrastructure/cloog-0.16.1.tar.gz # gcc依赖库的处理 mv cloog-0.18.1 gcc-8.2.0/cloog mv gmp-6.1.2 gcc-8.2.0/gmp mv mpfr-4.0.1 gcc-8.2.0/mpfr mv isl-0.18 gcc-8.2.0/isl mv mpc-1.1.0 gcc-8.2.0/mpc 安装适用于 aarch64 架构的交叉编译工具链,以便在 x86 上生成 aarch64 代码。 sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu export CC=aarch64-linux-gnu-gcc export CXX=aarch64-linux-gnu-g++ export LD=aarch64-linux-gnu-ld export AR=aarch64-linux-gnu-ar export AS=aarch64-linux-gnu-as export RANLIB=aarch64-linux-gnu-ranlib export LIBRARY_PATH= ../configure --prefix=/data/App/toolchain/target/out_aarch64/gcc_7.5.0-asan_modidy \ --build=x86_64-linux-gnu --host=aarch64-linux-gnu --target=aarch64-linux-gnu \ --enable-languages=c,c++ \ --disable-multilib
七、编译 curl-7.83.1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 export CC=gcc export CXX=g++ export LD=ld export AR=ar export AS=as export RANLIB=ranlib # 使用 --enable-debug 调试的时候可以达到跟踪代码的需求 # --without-nss 是因为自带的 curl 支持的 https 是 nss 版本,不是 openssl 的,我们需要用 openssl 版本的 # 可以使用 curl -V 查看 # --with-ssl 指定 openssl 的安装位置 ../configure --enable-debug --prefix=/data/App/toolchain/target/out_x86_64/curl-7.83.1 --without-nss --with-ssl=/data/App/toolchain/target/out_x86_64/openssl-1.1.1o sudo make && sudo make install 2. 编译 aarch64 export CC=aarch64-linux-gnu-gcc export CXX=aarch64-linux-gnu-g++ export LD=aarch64-linux-gnu-ld export AR=aarch64-linux-gnu-ar export AS=aarch64-linux-gnu-as export RANLIB=aarch64-linux-gnu-ranlib export PKG_CONFIG_PATH=/data/App/toolchain/target/out_aarch64/openssl-1.1.1o/lib/pkgconfig ../configure --target=aarch64-linux-gnu --host=aarch64-linux-gnu --build=x86_64-linux-gnu --prefix=/data/App/toolchain/target/out_aarch64/curl-7.83.1 --with-ssl=/data/App/toolchain/target/out_aarch64/openssl-1.1.1o --without-libidn2 --enable-shared --disable-static --with-pic=yes --disable-ldap --disable-ldaps --without-libidn --without-librt --without-zlib --without-nss --enable-debug
八、编译 jsoncpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1. 编译 x86_64 git clone git@github.com:open-source-parsers/jsoncpp.git git checkout 1.9.5 mkdir build_x86_64 && cd build_x86_64 cmake .. make -j10 2. 编译 aarch64 export CC=aarch64-linux-gnu-gcc export CXX=aarch64-linux-gnu-g++ export LD=aarch64-linux-gnu-ld export AR=aarch64-linux-gnu-ar export AS=aarch64-linux-gnu-as export RANLIB=aarch64-linux-gnu-ranlib cmake -DCMAKE_INSTALL_PREFIX=/data/App/toolchain/target/out_aarch64/jsoncpp_1.9.5 .. make && make install
六、编译 systemd 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 git clone git@github.com:systemd/systemd.git git checkout v253 sudo apt update sudo apt-get install build-essential bison meson pip3 install --upgrade meson sudo apt-get install libmount-dev sudo apt-get install libpthread-stubs0-dev 1. 编译 x86_64 gcc 7.5.0 export CC=gcc export CXX=g++ export LD=ld export AR=ar export AS=as export RANLIB=ranlib ./configure --prefix=/data/App/toolchain/target/out_x86_64/systemd_v253 --buildtype=release 会生成 build 目录。cd build ninja 遇到问题: /usr/bin/ld: /usr/local/lib/libcurl.a(libcurl_la-curl_threads.o): undefined reference to symbol 'pthread_create@@GLIBC_2.2.5' //lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status 中止编译
七、编译 eudev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 wget --no-check-certificate https://dev.gentoo.org/\~blueness/eudev/eudev-3.2.5.tar.gz 1. 编译 x86_64 gcc 7.5.0 export CC=gcc export CXX=g++ export LD=ld export AR=ar export AS=as export RANLIB=ranlib mkdir build_x86_64 && cd build_x86_64 ../configure --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --prefix=/data/App/toolchain/target/out_x86_64/eudev_3.2.5 make -j10 make install 2. 编译 aarch64 gcc 7.5.0 export CC=aarch64-linux-gnu-gcc export CXX=aarch64-linux-gnu-g++ export LD=aarch64-linux-gnu-ld export AR=aarch64-linux-gnu-ar export AS=aarch64-linux-gnu-as export RANLIB=aarch64-linux-gnu-ranlib mkdir build_aarch64 && cd build_aarch64 ../configure --build=x86_64-linux-gnu --host=aarch64-linux-gnu --target=aarch64-linux-gnu --prefix=/data/App/toolchain/target/out_aarch64/eudev_3.2.5 --disable-blkid --disable-kmod make -j10 make install 3. 编译 aarch64 gcc 9.2.1 export CC=aarch64-none-linux-gnu-gcc export CXX=aarch64-none-linux-gnu-g++ export LD=aarch64-none-linux-gnu-ld export AR=aarch64-none-linux-gnu-ar export AS=aarch64-none-linux-gnu-as export RANLIB=aarch64-none-linux-gnu-ranlib ../configure --build=x86_64-linux-gnu --host=aarch64-linux-gnu --target=aarch64-linux-gnu --prefix=/data/App/toolchain/target/out_aarch64_gcc921/eudev_3.2.5 --disable-blkid --disable-kmod
https://www.cnblogs.com/vaughnhuang/p/16187371.html
九、编译 pcap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 http://www.tcpdump.org/release/libpcap-1.8.1.tar.gz 1. 编译 x86_64 gcc 7.5.0 export CC=gcc export CXX=g++ export LD=ld export AR=ar export AS=as export RANLIB=ranlib mkdir build_x86_64 && cd build_x86_64 ../configure --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --prefix=/data/App/toolchain/target/out_x86_64/libpcap-1.8.1 make -j10 make install 2. 编译 aarch64 gcc 7.5.0 export CC=aarch64-linux-gnu-gcc export CXX=aarch64-linux-gnu-g++ export LD=aarch64-linux-gnu-ld export AR=aarch64-linux-gnu-ar export AS=aarch64-linux-gnu-as export RANLIB=aarch64-linux-gnu-ranlib mkdir build_aarch64 && cd build_aarch64 ../configure --build=x86_64-linux-gnu --host=aarch64-linux-gnu --target=aarch64-linux-gnu --prefix=/data/App/toolchain/target/out_aarch64/libpcap-1.8.1 --with-pcap=linux make -j10 make install 3. 编译 aarch64 gcc 9.2.1 export PATH=/opt/toolchain_9.2.1/bin:$PATH export CC=aarch64-none-linux-gnu-gcc export CXX=aarch64-none-linux-gnu-g++ export LD=aarch64-none-linux-gnu-ld export AR=aarch64-none-linux-gnu-ar export AS=aarch64-none-linux-gnu-as export RANLIB=aarch64-none-linux-gnu-ranlib mkdir build_aarch64_gcc_921 && cd build_aarch64_gcc_921 ../configure --build=x86_64-linux-gnu --host=aarch64-linux-gnu --target=aarch64-linux-gnu --prefix=/data/App/toolchain/target/out_aarch64_gcc921/libpcap-1.8.1 --with-pcap=linux make -j10 make install
十、编译 htop 1 2 3 4 5 6 7 8 9 10 11 12 2. 编译 aarch64 gcc 7.5.0 export CC=aarch64-linux-gnu-gcc export CXX=aarch64-linux-gnu-g++ export LD=aarch64-linux-gnu-ld export AR=aarch64-linux-gnu-ar export AS=aarch64-linux-gnu-as export RANLIB=aarch64-linux-gnu-ranlib mkdir build_aarch64 && cd build_aarch64 ../configure --build=x86_64-linux-gnu --host=aarch64-linux-gnu --target=aarch64-linux-gnu --prefix=/data/App/toolchain/target/out_aarch64/htop-2.2.0 --disable-unicode