交叉编译定义和使用

什么是交叉编译

对交叉编译解释得较为清楚的一片博客:https://blog.csdn.net/gatieme/article/details/53021351
主机编译:与交叉编译相对的词语叫做主机编译,即在自己主机上进行程序编译。也是多数人平时最常用的一种方式。比如在window用VC++编译程序,在Linux中使用GCC编译程序。

交叉编译:Cross compiling/即在一个操作平台中生成另一个平台上可用的可执行程序,例如:在LinuxPC机(主机平台)中生成LinuxArm(目的平台)机上的程序。因为目的平台处于一些原因(资源匮乏、不具备编译条件)不能够进行程序编译,需要在主机平台中将代码编译称为目的平台上的可执行程序,再放入目的平台执行。

1、并不总需要交叉编译

因为交叉编译不方便,且受到技术限制。

2、并不能缺少交叉编译

目的平台搭建较慢;
目的平台资源受限;比如常见的ARM平台,其一般的静态存储空间大概是16到32MB,而CPU的主频大概在100MHz到500MHz之间,这种情况下,在ARM平台上进行本机编译就不太可能
对于从一个开发主机为多个平台编译代码是非常有必要的;

想要可执行程序在目的平台运行,但在主机平台中直接编译的可执行程序并不能够在主机平台运行,因此需要交叉编译工具。我们就可以在CPU能力很强、存储空间足够的主机平台上(比如PC上)编译出针对其他平台的可执行程序。
首先对一些名词做以下约定。参考百科
宿主机/主机平台(host) :编辑和编译程序的平台,一般是基于X86的PC机,通常也被称为主机。
目标机/目的平台(target):用户开发的系统,通常都是非X86平台。host编译得到的可执行代码在target上运行。
交叉编译器命名/交叉工具链:完整格式是:CPU-制造厂商-操作系统,带 [] 的是可选部分,命名可参考;

交叉编译用法

  • way1:项目可在cmakelist中增加交叉编译器的位置,即更改cmake默认启动本机编译器,同时链接目的平台上的软件库。
    SET(CMAKE_CXX_COMPILER /opt/armgcc5.4.1/bin/arm-linux-gnueabihf-g++)
  • way2:将交叉编译平台打包,使用qemu-user-static挂载目的平台,在其中进行编译,比直接在目的平台编译方便。

sudo mount -t proc /proc systemname/proc
sudo mount -t sysfs /sys systemname/sys
sudo mount -o bind /dev systemname/dev
sudo mount -o bind /dev/pts systemname/dev/pts
sudo chroot systemname/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值