clang cross compile for mips

安装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

Cross-compiling Parsec benchmark for ARM architecture involves setting up a build environment on your host machine (likely x86 or x64) that can generate code for ARM targets. Here's a general outline of the steps: 1. **Install required tools**: Ensure you have installed a compiler and toolchain that supports ARM, like `gcc-arm-none-eabi` or `clang-arm`. 2. **Set up target environment**: You'll need to configure the toolchain with the correct paths and settings for the ARM target. This may involve creating a separate configuration file or specifying flags when invoking the compiler. ```sh export CC=arm-none-eabi-gcc export CXX=arm-none-eabi-g++ ``` 3. **Download Parsec**: Download the latest version of Parsec, which is a benchmarking suite, and extract it to a suitable location. 4. **Configure Makefile**: If Parsec has a Makefile, modify it to specify the target architecture. Look for lines similar to `CC`, `CFLAGS`, or `LDFLAGS`. Add or update them as needed, using the ARM-specific versions. 5. **Build for ARM**: Run `make clean && make` in the Parsec directory, replacing `make` with the appropriate command for your build system (e.g., `ninja` if you're using Ninja). ```sh make TARGET=arm-linux-gnueabihf ``` 6. **Test on ARM device or emulator**: Copy the generated `.elf` (executable) file to an ARM device or use an emulator to run it. **Related questions:** 1. What specific version of the ARM toolchain do I need? 2. How can I deal with dependencies if they don't have ARM builds available? 3. Are there any libraries or patches I need to include for compatibility with Parsec on ARM?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值