首页 > 其他分享 >交叉编译之为RISC v平台编译x86的gcc

交叉编译之为RISC v平台编译x86的gcc

时间:2023-06-13 20:56:14浏览次数:51  
标签:gcc enable x86 gnu -- 编译 export build

读者应该比较了解交叉编译的概念,一般都是在x86平台下使用gcc编译出其它平台的代码,这里我尝试在RISC v平台下编译出可以在x86平台使用的代码。

环境

  1. 在 x86_64 平台上编译 riscv64-unknown-linux-gnu-gcc 编译器,网上教程很多不再赘述
  2. 在 x86_64 平台上使用 riscv64-unknown-linux-gnu-gcc 编译出能够在RISC v平台上使用的 x86_64 gcc
    本文默认第一步已经完成,只介绍第二步。

一些软件环境:根据实际情况去安装,我这里只需要安装下面这些软件

apt-get install gcc-multilib g++-multilib

下载源码

根据 https://gcc.gnu.org/install/prerequisites.html 中的说明下载对应版本的MPFR\MPC\ISL\GMP源码和gcc的源码。

wget https://ftp.gnu.org/gnu/mpc/mpc-1.0.1.tar.gz
wget https://ftp.gnu.org/gnu/gmp/gmp-4.3.2.tar.gz
wget https://ftp.gnu.org/gnu/mpfr/mpfr-3.1.0.tar.xz
wget https://gcc.gnu.org/pub/gcc/infrastructure/isl-0.15.tar.bz2

假设gcc的源码位于GCCSRC=/root/gcc-build/gcc-releases-gcc-12.2.0,那么请把上述下载的lib的源码放置于$GCCSRC/mpfr, $GCCSRC/mpc .......

创建编译gcc的文件夹:GCCBUILD=/root/gcc-build/build, 安装文件夹GCCINSTALL=/root/gcc-build/_install

准备环境变量:

export ARCH=riscv
export CROSS_COMPILE=riscv64-unknown-linux-gnu-
export GCCINSTALL=/root/gcc-build/_install
export GCCBUILD=/root/gcc-build/build
export GCCSRC=/root/gcc-build/gcc-releases-gcc-10.4.0
export HOST=riscv64-unknown-linux-gnu
export PROGRAM_PREFIX=x86_64-linux-gnu-

编译

cd $GCCBUILD

$GCCSRC/configure --build=$BUILD --host=$HOST --target=$TARGET \
    -with-sysroot=$SYSROOT --prefix=$GCCINSTALL \
    --program-prefix=$PROGRAM_PREFIX --enable-checking=release \
    --enable-languages=c,c++ --enable-threads=posix  \
    --enable-shared --enable-tls --disable-libmudflap \
    --disable-libssp --disable-libquadmath --disable-libsanitizer \
    --disable-nls --disable-bootstrap --enable-multiarch --disable-werror \
    --with-arch-32=i686 --with-abi=m64 \
    --with-mulilib-list=m32,m64.mx32 --enable-multilib

make -j16

全部代码

export GCCINSTALL=/root/gcc-build/_install
export GCCBUILD=/root/gcc-build/build
export GCCSRC=/root/gcc-build/gcc-releases-gcc-9.4.0
export BUILD=x86_64-linux-gnu
export HOST=riscv64-unknown-linux-gnu
export TARGET=x86_64-linux-gnu
export PROGRAM_PREFIX=x86_64-linux-gnu-
export SYSROOT=/opt/riscv-gnu-toolchain/sysroot

cd $GCCBUILD

$GCCSRC/configure --build=$BUILD --host=$HOST --target=$TARGET \
    -with-sysroot=$SYSROOT --prefix=$GCCINSTALL \
    --program-prefix=$PROGRAM_PREFIX --enable-checking=release \
    --enable-languages=c,c++ --enable-threads=posix  \
    --enable-shared --enable-tls --disable-libmudflap \
    --disable-libssp --disable-libquadmath --disable-libsanitizer \
    --disable-nls --disable-bootstrap --enable-multiarch --disable-werror \
    --with-arch-32=i686 --with-abi=m64 \
    --with-mulilib-list=m32,m64.mx32 --enable-multilib

make -j64

参考文献

insall gcc
编译工具链

标签:gcc,enable,x86,gnu,--,编译,export,build
From: https://www.cnblogs.com/harrypotterjackson/p/17478551.html

相关文章

  • Rdma-core介绍及编译
    一、RDMAlib库安装1.1介绍广义的VerbsAPI主要由两大部分组成verbs和rdma_cmVerbsAPI操作RDMA的函数接口,也就是说业界的RDMA应用,要么直接基于这组API编写,要么基于在VerbsAPI上又封装了一层接口的各种中间件编写。(rdma_cm)VerbsAPI向用户提供了有关RDMA的一切功能,典型的包......
  • .NET编译项目时出现《此实现不是 Windows 平台 FIPS 验证的加密算法的一部分》处理方
    此实现不是Windows平台FIPS验证的加密算法的一部分。”)的问题,如下图所示:对于上面的问题,只需要修改下注册表即可处理,方法如下:1、以管理员方式启动命令行工具后输入regedit,回车打开注册器;。2、打开注册表后,进入路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Co......
  • Linux系统下如果在编译时指定程序运行时动态链接库相对目录,及为程序收集默认不安装动
    1、在编译中指定编译的程序去查找的动态链接库目录qmake是这样指定运行时动态库目录的:  QMAKE_LFLAGS+=-Wl,-rpath=/usr/local/ultrasec/policyfilter/lib/ 2、用lddPROG  查看程序的动态链接库,如果没有的动态链接库,就从其它计算机或者网络上找这个库,然后拷贝到指......
  • javascript反编译工具javascript-obfuscator的环境搭建
    javascript-obfuscator的项目和文档地址:https://github.com/javascript-obfuscator/javascript-obfuscatorwindows端安装nodejs环境打开nodejs安装包,一直点NEXT,默认设置安装即可。安装后:#测试nodejs和npm是否已安装npm-v#如果有输出版本号,例如输出9.5.0,表示安装成功#查看......
  • 14.拷贝构造函数、静态、友元和预编译头
    拷贝构造函数静态友元预编译头拷贝构造函数eg:Playeer.h代码:#pragmaonceclassPlayeer{private:intnum;char*name;public:Playeer(intx,constchar*name);~Playeer();voiddisplay();//输出结果voidsetX(intx);//......
  • Latex编译器推荐(面向初学者或者懒得折腾的朋友,主要针对windows用户)
    原文链接:https://blog.sciencenet.cn/blog-478347-1215384.html大家平时用的最多的排版工具想必就是Microsort的Word或者WPS了,所见即所得,Latex是另外一种排版工具,需要编译才可以生成pdf。相信大家在投稿的时候,会发现很多杂志都提供的textemplate。至于Latex好还是word好,这个已......
  • 乘风破浪,遇见最美Windows 11之现代Windows桌面应用开发 - .NET反编译神器dotPeek,免费
    什么是dotPeekhttps://www.jetbrains.com/decompiler/dotPeek是由鼎鼎有名的JetBrains开发的免费.Net反编译软件。其界面和VisualStudio一样现代。获取dotPeekhttps://www.jetbrains.com/decompiler/download/download-thanks.html?platform=windowsWebJetBrains.dotP......
  • 简单编译器
    目录0x01背景0x02SML语法0x03应用源码:编译过程:sml.txt文件:执行0x04SML_C实现sml_compiler.hsml_compiler.c0x05总结0x01背景《C语言大学教程-第八版》(《CHowtoProgram》)391页,第十二章作业,专题:创建自己的编译器在练习题7.27至练习题7.29中,我们介绍了Simpletron机器......
  • cmake设置gcc将shared library 改为生成 executeable
    前文ubuntu下,同一份代码,使用gcc和clang编译结果不相同。gcc编译结果,生成的程序为type为sharedlibary,而clang编译生成的程序的type为executeable.解决方案为cmakelists.txt脚本增加如下脚本set(CMAKE_CXX_FLAGS"-no-pie")set(CMAKE_C_FLAGS"-......
  • (2023.6.12)buildroot交叉编译第三方库
    编译链没有精确到bin目录Buildroot下没有dl文件夹(编译之后才有;新的第三方库,文件夹如何命名?) 修改profile,使用build_root重新编译??(重新打包就行)新的第三方库源码如何配置编译参数?......