安装libc交叉编译库
需要三种交叉编译的库:
-libc指定平台的cpp标准库
-binutils指定平台的内置函数库
-gcc指定平台的gcc编译链接环境,用于生成目标平台的环境,这里用clang代替gcc,次库未用到
sudo apt-get install libc6-dev-mips-cross libc6-mips-cross
sudo apt-get install binutils-mips-linux-gnu
sudo apt-get install libncurses5-dev # ncurses(new curses)是一套编程库,它提供了一系列的函数以便使用者调用它们去生成基于文本的用户界面。
sudo apt-get install gcc-mips-linux-gnu
编译llvm
下载clang, lld源码放到llvm/tools目录下,编译llvm.
clang cross compile for mips
clang与gcc不同, 统一的driver, 分别生成目标平台代码,默认包含交叉编译功能,只要指定 –target 即可,target指定方式可参考 cross-compilation using clang
mult.c
#include<stdio.h>
int main(){
int a, b, s;
a = 2;
b = 3;
s = a * b;
printf("s=%d\n",s);
return 0;
}
clang --target=mips-linux-gnu mult.c -o mult
qemu-mips mult
error,发现找不到ld-linux.so.1,建立软链接:
sudo ln -s /usr/mips-linux-gnu//lib/ld.so.1 /lib/ld.so.1
运行,继续报错libc动态链接库,LIB无法找到,把交叉编译安装的lib目录添加到LD_LIBRARY_PATH中:
export LD_LIBRARY_PATH=/usr/mips-linux-gnu/lib/:$LD_LIBRARY_PATH
此外可能还有一个错误:
In file included from mult.c:1:
In file included from /usr/include/stdio.h:27:
/usr/include/features.h:367:12: fatal error: 'sys/cdefs.h' file not found
# include <sys/cdefs.h>
^~~~~~~~~~~~~
1 error generated.
安装libc-dev-i386解决
sudo apt-get install libc-dev-i386
最终运行成功
s=6
gcc编译
使用gcc编译链接,生成Mips可执行文件:
mips-linux-gnu-gcc mult.c -o mult
同样也可以成功运行
qemu-mips mult
s=6
参考: how to cross-compile clang/llvm using clang/llvm
install the arm cross compiler toolchain on your linux ubuntu pc