环境
操作系统:Debian 11 Bullseye、银河麒麟(Kylin)V10 SP1、红旗(RedFlag) V11、Loongnix 20
适用架构:MIPS64EL(龙芯)3A3000、3A4000
简介
2021 年 4 月,龙芯中科发布了 LoongArch 指令集,这与之前的 MIPS64EL 是不兼容的。因此选择操作系统时要注意架构的支持情况。3A4000 及之前的 CPU 兼容 MIPS64EL 指令集,3A5000 及之后的 CPU 使用 LoongArch 指令集。
下载源代码
https://www.7-zip.org/download.html
安装编译环境
sudo apt install g++
编译 7za
进入目录
mkdir 7z2201-src
tar xvJf 7z2201-src.tar.xz -C 7z2201-src
静态编译 7za(静态链接-static)
chmod +w 7z2201-src/CPP/7zip/7zip_gcc.mak
nano 7z2201-src/CPP/7zip/7zip_gcc.mak
修改 7z2201-src/CPP/7zip/7zip_gcc.mak 文件的第45行的 LDFLAGS_STATIC_2,由空赋值为 -static
LDFLAGS_STATIC_2 = -static
# -static
# -static-libstdc++ -static-libgcc
静态编译
cd 7z2201-src/CPP/7zip/Bundles/Alone
$ make -f makefile.gcc
$ file 7za
7za: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=22269394e402fbccfb35017d21b3ffb9eb4994bf, for GNU/Linux 3.2.0, stripped
动态编译7za
$ make -f makefile.gcc
$ file 7za
7za: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=5e07e05837089b8efb2627ff9d67be881dda4c19, for GNU/Linux 3.2.0, stripped
$ ldd 7za
linux-vdso.so.1 (0x00007ffd17262000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f5d5404b000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f5d53e69000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f5d53e4e000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5d53c5c000)
/lib64/ld-linux-x86-64.so.2 (0x00007f5d5421c000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f5d53b0d000)
2.2 linux编译7z.so
进入目录
cd 7z2107-src\CPP\7zip\Bundles\Format7zF
动态编译7z.so
$ make -f makefile.gcc
$ file 7z.so
7z.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c66ae8bb982aae3c8c37f0eba0c91a30fe152ec, stripped
$ ldd 7z.so
linux-vdso.so.1 (0x00007fff24d4c000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9ec200f000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f9ec1e2d000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f9ec1e12000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9ec1c20000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9ec22f2000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9ec1ad1000)