专栏首页C++核心准则原文翻译ARM C++交叉编译环境构建方法

ARM C++交叉编译环境构建方法

本文说明在Linux主机上构建ARM开发用最新C++编译环境的方法。

安装Ubuntu主机

安装虚拟机软件

从VitualBox官网下载最新的VirtualBox。

https://www.virtualbox.org/wiki/Downloads

具体的安装包根据正在使用的操作系统决定。

安装Ubuntu操作系统

下载并安装Ubuntu

交叉编译环境我们选择最新的Ubuntu操作系统,它可以从以下地址下载:

https://ubuntu.com/#download

接下来的说明以Ubuntu Desktop 19.10为例进行,18.04也没有问题。

配置网络

由于需要共享开发目录,因此将虚拟机的网络设定为"桥接网卡"模式。

安装交叉编译软件(gcc/g++)

修改镜像服务器列表

打开安装包服务器列表文件:

sudo vi /etc/apt/sources.list

增加镜像服务器

在srouce.list最后增加以下内容:

deb http://th.archive.ubuntu.com/ubuntu bionic-updates main universe

安装g++/gcc

sudo apt-get install gcc-8-arm-linux-gnueabi
sudo apt-get install g++-8-arm-linux-gnueabi

确认安装结果

在任意位置输入以下命令确认gcc-8-arm的安装情况:

arm-linux-gnueabi-gcc -v

正确安装gcc交叉编译器之后,应该出现以下信息:

Using built-in specs.
COLLECT_GCC=arm-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/arm-linux-gnueabi/8/lto-wrapper
Target: arm-linux-gnueabi
...
gcc version 8.3.0 (Ubuntu/Linaro 8.3.0-23ubuntu2)

主要关注第二行的COLLECT_GCC信息和最后一行的版本信息(版本可能略有不同)。

以同样的方式确认g++-8的安装结果:

arm-linux-gnueabi-g++ -v

正确安装g++交叉编译器之后,应该出现以下信息:

Using built-in specs.
COLLECT_GCC=arm-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/arm-linux-gnueabi/8/lto-wrapper
Target: arm-linux-gnueabi
...
gcc version 8.3.0 (Ubuntu/Linaro 8.3.0-23ubuntu2)

主要关注第二行的COLLECT_GCC信息和最后一行的版本信息(版本可能略有不同)。

参考信息:

gcc-8:

https://packages.ubuntu.com/bionic-updates/amd64/gcc-8-arm-linux-gnueabi/download

g++-8:

https://packages.ubuntu.com/bionic-updates/amd64/g++-8-arm-linux-gnueabi/download

安装Eclipse CDT

下载EclipseCDT

进入下面的网页:

https://www.eclipse.org/downloads/packages/

选择下图红框中的Eclipse IDE for C/C++ Developers:

由于要在Ubuntu上运行这个开发环境,因此选择[Linux 64-bit]进行下载。

安装EclipseCDT

在适当的位置使用以下命令解压缩安装包(表明可能略有不同)。

tar -zxvf eclipse-cpp-2019-12-R-linux-gtk-x86_64.tar.gz

进入加压缩得到的eclipse目录,启动eclipse:

./eclipse

如果不能成功启动,一般就是Java环境不具备,自行安装jre或者jdk即可。

建立交叉编译项目

构建项目

进入加压缩得到的eclipse目录,启动eclipse:

./eclipse

如下图选择工作目录并按下[Launch]按钮:

通过如下菜单选择创建新项目:

[File]-[New]-[Project]

选择[C/C++Project]作为项目类型,进入下一步:

选择[C++ ManagedBuild]之后,进入下一步:

选择[Cross GCC]之后进入下一步:

直接进入下一步:

在下面的画面中配置交叉编译器,之后按下[Finish]结束。

配置内容:

1.在[Cross compiler prefix]编辑框中输入[arm-linux-gnueabi-]

2.为[Cross complier path:]项目选择[\usr\bin].

编写验证程序

参照下图为arm_cpp项目添加arm_cpp.cpp文件:

编辑以下内容:

#include<iostream>

int main()
{
    std::cout << "Hello GCC/G++ Compiler!" << std::endl;
    return 0;
}

通过以下菜单编译arm_cpp工程:

[Project]-[Build Project]

在eclipse的Console栏中出现如下内容()就表示大功告成!

16:29:17 **** Build of configuration Debug for project arm_cpp ****
make all
Building file: ../arm.cpp
Invoking: Cross G++ Compiler
arm-linux-gnueabi-g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"arm.d" -MT"arm.o" -o "arm.o" "../arm.cpp"
Finished building: ../arm.cpp
 
Building target: arm_cpp
Invoking: Cross G++ Linker
arm-linux-gnueabi-g++  -o "arm_cpp"  ./arm.o  
Finished building target: arm_cpp
 
16:29:17 Build Finished. 0 errors, 0 warnings. (took 382ms)


觉得本文有帮助?请分享给更多人。

关注【面向对象思考】轻松学习每一天!

面向对象开发,面向对象思考!

本文分享自微信公众号 - 面向对象思考(OOThinkingDalian),作者:面向对象思考

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C++核心准则C.150:unique_ptr管理的对象要用make_unique()​构建

    make_unique gives a more concise statement of the construction. It also ensures ...

    面向对象思考
  • C++核心准则C.130:实现多态类的深拷贝时,虚clone函数要比拷贝构造函数/赋值运算符好

    C.130: For making deep copies of polymorphic classes prefer a virtual clone func...

    面向对象思考
  • C++核心准则ES.78:不要依靠switch语句的隐式下沉处理

    Always end a non-empty case with a break. Accidentally leaving out a break is a ...

    面向对象思考
  • Ubuntu 14.04 LTS下使用arm-linux-gcc交叉编译OpenCV 2.4.9

    Ubuntu 14.04 LTS下使用arm-linux-gcc交叉编译OpenCV 2.4.9 当前两个手头有两个项目都是都需要在ARM板中使用OpenCV,...

    剑影啸清寒
  • 用了 10 多年的 Tomcat 居然有bug !

    为了解决分布式链路追踪的问题,我们引入了实现OpenTracing的Jaeger来实现。然后我们为SpringBoot框架写了一个starter以让用户实现近零...

    Java技术栈
  • 用了10多年的 Tomcat 居然有bug,这能忍?

    为了解决分布式链路追踪的问题,我们引入了实现OpenTracing的Jaeger来实现。然后我们为SpringBoot框架写了一个starter以让用户实现近零...

    Java团长
  • Nginx安装、默认虚拟主机、用户认证、nginx中PHP解析

    对于LNMP来说,最常见的就是502问题,LNMP环境搭建完成后,一访问网站直接提示“502 Bad Gateway”。主要原因大致分为两种:

    阿dai学长
  • linux shell编程学习笔记(3)

    (2)默认定义的变量只在当前的shell里可以使用,无法在子shell使用。要想定义的变量让所有的shell都可以用,要在系统启动时把它定义为全局变量

    py3study
  • 对广晟有色的数据分析

    从广晟有色的K线图,有一个直观的感觉,就是价格上涨和成交量增加是相关的,而下跌时成交量似乎并不明显,能否进行一个量化的描述呢? ? 1、不能用成交量,用成交量相...

    用户1075292
  • 日常答疑|Python实现分类频数统计

    预览数据发现,数据格式不正确,需要先进行格式转换,以及防止隐私泄露,我们用一定的方法进行脱敏处理。

    用户7466307

扫码关注云+社区

领取腾讯云代金券