1. 交叉编译工具链准备
从龙芯开源社区(http://www.loongnix.cn)获取最新交叉编译工具链
$ mkdir cross
$ cd cross
$ wget http://ftp.loongnix.cn/toolchain/gcc/release/mips/gcc8/mips-loongson-gcc8-linux-gnu-2021-02-08.tar.gz
--2021-12-16 15:30:55-- http://ftp.loongnix.cn/toolchain/gcc/release/mips/gcc8/mips-loongson-gcc8-linux-gnu-2021-02-08.tar.gz
正在解析主机 ftp.loongnix.cn (ftp.loongnix.cn)... 192.168.200.30
正在连接 ftp.loongnix.cn (ftp.loongnix.cn)|192.168.200.30|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:497822488 (475M) [application/x-gzip]
正在保存至: “mips-loongson-gcc8-linux-gnu-2021-02-08.tar.gz”
mips-loongson-gcc8-linux-gnu-2021-02-08.tar.gz 100%[=====================================================================================================>] 474.76M 65.7MB/s 用时 7.2s
2021-12-16 15:31:02 (66.0 MB/s) - 已保存 “mips-loongson-gcc8-linux-gnu-2021-02-08.tar.gz” [497822488/497822488])
$ tar xf mips-loongson-gcc8-linux-gnu-2021-02-08.tar.gz
2.hello.c
编写hello.c
#include <stdio.h>
int main(void)
{
printf("hello world.\n");
return 0;
}
3. 设定环境变量
设置PATH环境变量
$ export PATH=/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin:$PATH
查看gcc版本
$ mips-linux-gnu-gcc -v
Using built-in specs.
COLLECT_GCC=mips-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../libexec/gcc/mips-linux-gnu/8.3.0/lto-wrapper
Target: mips-linux-gnu
Configured with: /opt/loongson-gcc8.3.0-linux-gnu/src/gcc-8.3.0/src/configure --build=x86_64-unkonwn-linux --host=x86_64-unkonwn-linux --target=mips-linux-gnu --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --with-arch-32=mips32r2 --with-arch-64=mips64r2 --with-float=hard --with-mips-plt --enable-extra-sgxxlite-multilibs --with-gnu-as --with-gnu-ld --enable-languages=c,c++,fortran --enable-shared --enable-lto --enable-symvers=gnu --enable-__cxa_atexit --with-fix-loongson3-llsc --with-fused-madd4 --with-linker-hash-style=both --with-glibc-version=2.25 --with-pkgversion='loongson cross toolchain' --with-bugurl=http://bugs.loongnix.org/ --disable-nls --prefix=/opt/loongson --disable-libffi --disable-libquadmath --disable-libitm --disable-libatomic --with-sysroot=/opt/loongson/mips-linux-gnu/libc --with-build-sysroot=/opt/loongson-gcc8.3.0-linux-gnu/install/mips-loongson-gcc8-linux-gnu-2021-02-08/mips-linux-gnu/libc --with-gmp=/opt/loongson-gcc8.3.0-linux-gnu/obj/pkg-mips-linux-gnu/host-libs-x86_64-pc-linux-gnu/usr --with-mpfr=/opt/loongson-gcc8.3.0-linux-gnu/obj/pkg-mips-linux-gnu/host-libs-x86_64-pc-linux-gnu/usr --with-mpc=/opt/loongson-gcc8.3.0-linux-gnu/obj/pkg-mips-linux-gnu/host-libs-x86_64-pc-linux-gnu/usr --disable-libgomp --disable-libitm --disable-libatomic --disable-libssp --disable-libcc1 --enable-poison-system-directories --with-python-dir=mips-linux-gnu/share/gdb/python --with-build-time-tools=/opt/loongson-gcc8.3.0-linux-gnu/install/mips-loongson-gcc8-linux-gnu-2021-02-08/mips-linux-gnu/bin --with-build-time-tools=/opt/loongson-gcc8.3.0-linux-gnu/install/mips-loongson-gcc8-linux-gnu-2021-02-08/mips-linux-gnu/bin SED=sed
Thread model: posix
gcc version 8.3.0 (loongson cross toolchain)
4 编译
4.1 直接编译
$ mips-linux-gnu-gcc hello.c -mips64r2 -mabi=64 -o hello
$ file hello
hello: ELF 64-bit LSB executable, MIPS, MIPS64 rel2 version 1 (SYSV), dynamically linked, interpreter /lib64/ld.so.1, for GNU/Linux 3.2.0, with debug_info, not stripped
将编译的hello拷贝到龙芯3A4000机器上运行
$ ./hello
hello world.
4.2 分步编译
预处理------编译-----汇编-----链接
加入-v参数,查看每一步的具体过程
预处理
$ mips-linux-gnu-gcc -march=mips64r2 -mabi=64 -v -E hello.c -o hello.i
Using built-in specs.
COLLECT_GCC=mips-linux-gnu-gcc
Target: mips-linux-gnu
Configured with: /opt/loongson-gcc8.3.0-linux-gnu/src/gcc-8.3.0/src/configure --build=x86_64-unkonwn-linux --host=x86_64-unkonwn-linux --target=mips-linux-gnu --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --with-arch-32=mips32r2 --with-arch-64=mips64r2 --with-float=hard --with-mips-plt --enable-extra-sgxxlite-multilibs --with-gnu-as --with-gnu-ld --enable-languages=c,c++,fortran --enable-shared --enable-lto --enable-symvers=gnu --enable-__cxa_atexit --with-fix-loongson3-llsc --with-fused-madd4 --with-linker-hash-style=both --with-glibc-version=2.25 --with-pkgversion='loongson cross toolchain' --with-bugurl=http://bugs.loongnix.org/ --disable-nls --prefix=/opt/loongson --disable-libffi --disable-libquadmath --disable-libitm --disable-libatomic --with-sysroot=/opt/loongson/mips-linux-gnu/libc --with-build-sysroot=/opt/loongson-gcc8.3.0-linux-gnu/install/mips-loongson-gcc8-linux-gnu-2021-02-08/mips-linux-gnu/libc --with-gmp=/opt/loongson-gcc8.3.0-linux-gnu/obj/pkg-mips-linux-gnu/host-libs-x86_64-pc-linux-gnu/usr --with-mpfr=/opt/loongson-gcc8.3.0-linux-gnu/obj/pkg-mips-linux-gnu/host-libs-x86_64-pc-linux-gnu/usr --with-mpc=/opt/loongson-gcc8.3.0-linux-gnu/obj/pkg-mips-linux-gnu/host-libs-x86_64-pc-linux-gnu/usr --disable-libgomp --disable-libitm --disable-libatomic --disable-libssp --disable-libcc1 --enable-poison-system-directories --with-python-dir=mips-linux-gnu/share/gdb/python --with-build-time-tools=/opt/loongson-gcc8.3.0-linux-gnu/install/mips-loongson-gcc8-linux-gnu-2021-02-08/mips-linux-gnu/bin --with-build-time-tools=/opt/loongson-gcc8.3.0-linux-gnu/install/mips-loongson-gcc8-linux-gnu-2021-02-08/mips-linux-gnu/bin SED=sed
Thread model: posix
gcc version 8.3.0 (loongson cross toolchain)
COLLECT_GCC_OPTIONS='-march=mips64r2' '-mabi=64' '-v' '-E' '-o' 'hello.i' '-mhard-float' '-mllsc' '-mfix-loongson3-llsc' '-mfused-madd4' '-mno-shared' '-EL'
/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../libexec/gcc/mips-linux-gnu/8.3.0/cc1 -E -quiet -v -imultilib 64 -iprefix /home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../lib/gcc/mips-linux-gnu/8.3.0/ -isysroot /home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../mips-linux-gnu/libc hello.c -o hello.i -mel -march=mips64r2 -mabi=64 -mhard-float -mllsc -mfix-loongson3-llsc -mfused-madd4 -mno-shared
ignoring duplicate directory "/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/lib/gcc/mips-linux-gnu/8.3.0/include"
ignoring nonexistent directory "/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../mips-linux-gnu/libc/usr/local/include"
ignoring duplicate directory "/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/lib/gcc/mips-linux-gnu/8.3.0/include-fixed/64"
ignoring duplicate directory "/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/mips-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/lib/gcc/mips-linux-gnu/8.3.0/include
/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/lib/gcc/mips-linux-gnu/8.3.0/include-fixed/64
/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/mips-linux-gnu/include
/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/mips-linux-gnu/libc/usr/include
End of search list.
COMPILER_PATH=/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../libexec/gcc/mips-linux-gnu/8.3.0/:/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../libexec/gcc/:/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../lib/gcc/mips-linux-gnu/8.3.0/../../../../mips-linux-gnu/bin/
LIBRARY_PATH=/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../lib/gcc/mips-linux-gnu/8.3.0/64/:/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../lib/gcc/mips-linux-gnu/8.3.0/../../../../mips-linux-gnu/lib/../lib64/:/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../mips-linux-gnu/libc//lib64/../lib64/:/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../mips-linux-gnu/libc//usr/lib64/../lib64/:/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../lib/gcc/mips-linux-gnu/8.3.0/:/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../lib/gcc/:/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../lib/gcc/mips-linux-gnu/8.3.0/../../../../mips-linux-gnu/lib/:/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../mips-linux-gnu/libc//lib64/:/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../mips-linux-gnu/libc//usr/lib64/
COLLECT_GCC_OPTIONS='-march=mips64r2' '-mabi=64' '-v' '-E' '-o' 'hello.i' '-mhard-float' '-mllsc' '-mfix-loongson3-llsc' '-mfused-madd4' '-mno-shared' '-EL'
编译
$ mips-linux-gnu-gcc -march=mips64r2 -mabi=64 -v -s hello.i -o hello.s
Using built-in specs.
COLLECT_GCC=mips-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../libexec/gcc/mips-linux-gnu/8.3.0/lto-wrapper
Target: mips-linux-gnu
Configured with: /opt/loongson-gcc8.3.0-linux-gnu/src/gcc-8.3.0/src/configure --build=x86_64-unkonwn-linux --host=x86_64-unkonwn-linux --target=mips-linux-gnu --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --with-arch-32=mips32r2 --with-arch-64=mips64r2 --with-float=hard --with-mips-plt --enable-extra-sgxxlite-multilibs --with-gnu-as --with-gnu-ld --enable-languages=c,c++,fortran --enable-shared --enable-lto --enable-symvers=gnu --enable-__cxa_atexit --with-fix-loongson3-llsc --with-fused-madd4 --with-linker-hash-style=both --with-glibc-version=2.25 --with-pkgversion='loongson cross toolchain' --with-bugurl=http://bugs.loongnix.org/ --disable-nls --prefix=/opt/loongson --disable-libffi --disable-libquadmath --disable-libitm --disable-libatomic --with-sysroot=/opt/loongson/mips-linux-gnu/libc --with-build-sysroot=/opt/loongson-gcc8.3.0-linux-gnu/install/mips-loongson-gcc8-linux-gnu-2021-02-08/mips-linux-gnu/libc --with-gmp=/opt/loongson-gcc8.3.0-linux-gnu/obj/pkg-mips-linux-gnu/host-libs-x86_64-pc-linux-gnu/usr --with-mpfr=/opt/loongson-gcc8.3.0-linux-gnu/obj/pkg-mips-linux-gnu/host-libs-x86_64-pc-linux-gnu/usr --with-mpc=/opt/loongson-gcc8.3.0-linux-gnu/obj/pkg-mips-linux-gnu/host-libs-x86_64-pc-linux-gnu/usr --disable-libgomp --disable-libitm --disable-libatomic --disable-libssp --disable-libcc1 --enable-poison-system-directories --with-python-dir=mips-linux-gnu/share/gdb/python --with-build-time-tools=/opt/loongson-gcc8.3.0-linux-gnu/install/mips-loongson-gcc8-linux-gnu-2021-02-08/mips-linux-gnu/bin --with-build-time-tools=/opt/loongson-gcc8.3.0-linux-gnu/install/mips-loongson-gcc8-linux-gnu-2021-02-08/mips-linux-gnu/bin SED=sed
Thread model: posix
gcc version 8.3.0 (loongson cross toolchain)
COLLECT_GCC_OPTIONS='-march=mips64r2' '-mabi=64' '-v' '-s' '-o' 'hello.s' '-mhard-float' '-mllsc' '-mfix-loongson3-llsc' '-mfused-madd4' '-mno-shared' '-EL'
/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../libexec/gcc/mips-linux-gnu/8.3.0/cc1 -fpreprocessed hello.i -mel -quiet -dumpbase hello.i -march=mips64r2 -mabi=64 -mhard-float -mllsc -mfix-loongson3-llsc -mfused-madd4 -mno-shared -auxbase hello -version -o /tmp/ccGbgOod.s
GNU C17 (loongson cross toolchain) version 8.3.0 (mips-linux-gnu)
compiled by GNU C version 4.4.7 20120313 (Red Hat 4.4.7-23), GMP version 6.1.2, MPFR version 4.0.2, MPC version 1.1.0, isl version none
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
GNU C17 (loongson cross toolchain) version 8.3.0 (mips-linux-gnu)
compiled by GNU C version 4.4.7 20120313 (Red Hat 4.4.7-23), GMP version 6.1.2, MPFR version 4.0.2, MPC version 1.1.0, isl version none
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 93d86743fd86b57bd034193cfa73bcc3
COLLECT_GCC_OPTIONS='-march=mips64r2' '-mabi=64' '-v' '-s' '-o' 'hello.s' '-mhard-float' '-mllsc' '-mfix-loongson3-llsc' '-mfused-madd4' '-mno-shared' '-EL'
/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../lib/gcc/mips-linux-gnu/8.3.0/../../../../mips-linux-gnu/bin/as -v -EL -O1 -mabi=64 -march=mips64r2 -mno-shared -mhard-float -KPIC -o /tmp/ccQugjiD.o /tmp/ccGbgOod.s
GNU assembler version 2.31.1 (mips-linux-gnu) using BFD version (loongson cross toolchain) 2.31.1
COMPILER_PATH=/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../libexec/gcc/mips-linux-gnu/8.3.0/:/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../libexec/gcc/:/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../lib/gcc/mips-linux-gnu/8.3.0/../../../../mips-linux-gnu/bin/
LIBRARY_PATH=/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../lib/gcc/mips-linux-gnu/8.3.0/64/:/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../lib/gcc/mips-linux-gnu/8.3.0/../../../../mips-linux-gnu/lib/../lib64/:/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../mips-linux-gnu/libc//lib64/../lib64/:/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../mips-linux-gnu/libc//usr/lib64/../lib64/:/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../lib/gcc/mips-linux-gnu/8.3.0/:/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../lib/gcc/:/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../lib/gcc/mips-linux-gnu/8.3.0/../../../../mips-linux-gnu/lib/:/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../mips-linux-gnu/libc//lib64/:/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../mips-linux-gnu/libc//usr/lib64/
COLLECT_GCC_OPTIONS='-march=mips64r2' '-mabi=64' '-v' '-s' '-o' 'hello.s' '-mhard-float' '-mllsc' '-mfix-loongson3-llsc' '-mfused-madd4' '-mno-shared' '-EL'
/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../libexec/gcc/mips-linux-gnu/8.3.0/collect2 -plugin /home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../libexec/gcc/mips-linux-gnu/8.3.0/liblto_plugin.so -plugin-opt=/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../libexec/gcc/mips-linux-gnu/8.3.0/lto-wrapper -plugin-opt=-fresolution=/tmp/cce3yhd3.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --sysroot=/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../mips-linux-gnu/libc/ --eh-frame-hdr --hash-style=both -EL -dynamic-linker /lib64/ld.so.1 -melf64ltsmip -o hello.s -s /home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../mips-linux-gnu/libc//usr/lib64/../lib64/crt1.o /home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../mips-linux-gnu/libc//usr/lib64/../lib64/crti.o /home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../lib/gcc/mips-linux-gnu/8.3.0/64/crtbegin.o -L/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../lib/gcc/mips-linux-gnu/8.3.0/64 -L/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../lib/gcc/mips-linux-gnu/8.3.0/../../../../mips-linux-gnu/lib/../lib64 -L/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../mips-linux-gnu/libc//lib64/../lib64 -L/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../mips-linux-gnu/libc//usr/lib64/../lib64 -L/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../lib/gcc/mips-linux-gnu/8.3.0 -L/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../lib/gcc -L/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../lib/gcc/mips-linux-gnu/8.3.0/../../../../mips-linux-gnu/lib -L/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../mips-linux-gnu/libc//lib64 -L/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../mips-linux-gnu/libc//usr/lib64 /tmp/ccQugjiD.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../lib/gcc/mips-linux-gnu/8.3.0/64/crtend.o /home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../mips-linux-gnu/libc//usr/lib64/../lib64/crtn.o
COLLECT_GCC_OPTIONS='-march=mips64r2' '-mabi=64' '-v' '-s' '-o' 'hello.s' '-mhard-float' '-mllsc' '-mfix-loongson3-llsc' '-mfused-madd4' '-mno-shared' '-EL'
汇编
需要添加参数*-EL -O1 -mabi=64 -march=mips64r2 -mno-shared -mhard-float -KPIC *,此处的添加,请参考编译步骤的输出信息
$mips-linux-gnu-as -EL -O1 -mabi=64 -march=mips64r2 -mno-shared -mhard-float -KPIC hello.S -o hello.o
链接
$ mips-linux-gnu-ld -m elf64ltsmip /home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../mips-linux-gnu/libc//usr/lib64/../lib64/crt1.o /home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../mips-linux-gnu/libc//usr/lib64/../lib64/crti.o /home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../lib/gcc/mips-linux-gnu/8.3.0/64/crtbegin.o -L/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../lib/gcc/mips-linux-gnu/8.3.0/64 -L/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../lib/gcc/mips-linux-gnu/8.3.0/../../../../mips-linux-gnu/lib/../lib64 -L/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../mips-linux-gnu/libc//lib64/../lib64 -L/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../mips-linux-gnu/libc//usr/lib64/../lib64 -L/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../lib/gcc/mips-linux-gnu/8.3.0 -L/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../lib/gcc -L/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../lib/gcc/mips-linux-gnu/8.3.0/../../../../mips-linux-gnu/lib -L/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../mips-linux-gnu/libc//lib64 -L/home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../mips-linux-gnu/libc//usr/lib64 hello.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../lib/gcc/mips-linux-gnu/8.3.0/64/crtend.o /home/loongson/cross/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/../mips-linux-gnu/libc//usr/lib64/../lib64/crtn.o -o hello
生成hello可执行程序
$ file hello
hello: ELF 64-bit LSB executable, MIPS, MIPS64 rel2 version 1 (SYSV), dynamically linked, interpreter /lib64/ld.so.1, for GNU/Linux 3.2.0, not stripped
注意上述命令的-m elf64ltsmip参数
通过如下方式获取ld的仿真类型
$ mips-linux-gnu-ld -V
GNU ld (loongson cross toolchain) 2.31.1
Supported emulations:
elf32btsmip
elf32ltsmip
elf32btsmipn32
elf64btsmip
elf32ltsmipn32
elf64ltsmip
此处选择elf64ltsmip(64位小端)
4.3 sysroot的使用
4.3.1 挂载远端sysroot
$ mkdir sysroot
sshfs test@192.168.20.1:/ sysroot/
4.3.2 编译
$ mips-linux-gnu-gcc -march=mips64r2 -mabi=64 -B ./sysroot/lib/mips64el-linux-gnuabi64/ --sysroot=$PWD/sysroot hello.c -o hello
$ file hello
hello: ELF 64-bit LSB executable, MIPS, MIPS64 rel2 version 1 (SYSV), dynamically linked, interpreter /lib64/ld.so.1, for GNU/Linux 3.2.0, not stripped