CLion配置WSL工具链

前言

上篇文章记录了安装WSL的方法和过程,现在要在CLion的STM32工程里设置WSL为工具链,目的是能使build和run通过。

首先在settings →Build, Execution, Deployment→toolchain中新增WSL,Clion会检测本机安装的WSL,在Toolset那一栏会显示绿和具体版本,但是后面的选项比如CMake/Build Tool/C Complier/C++ Complier/Debugger则通通提示找不到:

这是因为WSL里的Ubuntu还没有安装这些工具。我们一项一项来安装。

Ubuntu内安装工具链

1.CMake

运行WSL里的Ubuntu,执行命令sudo apt install cmake,但运行到一半,出现错误,提示CMake所依赖的libssl1.1 is not installable.

1.1安装libssl1.1.1

使用wget命令进行安装,网上搜了一些文章,给出的安装链接不一样,试了好几个要不是连接出错,要么是版本不匹配系统。

经过尝试,后来发现,大家给出的链接都出自两个目录:

Index of /ubuntu/pool/main/o/openssl

Index of /ubuntu-ports/pool/main/o/openssl

第一个目录里没有amd64版本的,第二个有。

而我们要选择的是amd64的版本,而不是arm64,因为机器是英特尔/AMD架构的,不是arm架构。是不是对amd64这个名字感到困惑,去搜搜就知道了,英特尔IA-32架构之后,是amd率先推出兼容IA-32位架构的64位指令集架构,称为AMD64。

在1999年,AMD公司首先在IA-32基础上,增加了64位寄存器,兼容早期的16位和32位软件系统,推出了x86-64的64位微处理器,后来命名为AMD64,实现了超车。然后intel公司也接受了该方案,叫做Intel64。x86-64应该只算是x86指令集的64位扩展,并不是一种全新的64位架构。

由于amd64和intel64本质上是一样的,叫法也是很多。AMD通常叫它x86-64、x86_64,微软和sun等软件公司叫它x64,操作系统厂商则通常用AMD64或者amd64来指代AMD64和Intel64。

(15 封私信 / 1 条消息) 为什么有的地方叫X86-64,有的地方叫AMD64? - 知乎 (zhihu.com)

所以去第二个链接的目录里找就行了,这里直接给出我写这个文章时可用的一个版本,放到wget命令里并解压安装:

wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1-1ubuntu2.1~18.04.20_amd64.deb

sudo dpkg -i libssl1.1_1.1.1-1ubuntu2.1~18.04.20_amd64.deb

记得要用sudo执行安装,不然权限不够。

1.2 安装CMake

安装好了libssl后,就可以执行CMake的安装了:

sudo apt install cmake

再回到CLion设置界面,可以检测到CMake了:

界面显示找不到GDB,请安装。

2.安装GDB

执行下列命令:

sudo apt install gdb

如果能成功安装本节以下内容可以忽略,如果遇到 'unable to locate package gdb'的问题,请参考下列解决办法: 

由于此文写于调试后的第三天,我已记不得是否一次成功。且留存的截图显示我当时命令打错了,gdb打成了gbd

不知当时是否发现并纠正命令,且依然出现同样的“unable to locate package gdb”问题。

总之,我当时是搜索了这个问题,找到的解决方案是:

sudo apt-get update  --  从服务器获取软件列表,并在本地保存为文件。

 不管我是否遇到了这个问题,我是执行了这个命令的。

再执行安装gdb的命令,成功了。

安装完GDB之后,回到CLion设置界面,已经可以侦测到GDB了:

到这里看似一切安好,应该可以编译了吧

3.尝试编译(新的问题出现)

3.1找不到编译器

回到CLion主界面,刷新CMake,出现新的问题:

提示找不到C/C++/ASM(汇编)compiler,根据提示,C和ASM对应的编译器是

arm-none-eabi-gcc,C++对应的是arn-none-eabi-g++.(要注意这两个和gcc和g++的不同。)

作为一个小白,一开始是不太明白为什么的,既然CLion的工具链设置界面都正常了(没有错误提示),为什么还出现错误呢。

就我目前的理解,原因在于工具链设置界面的C compiler 和 C++ compiler不是对应STM32嵌入式开发用的。

 注意前面红字的部分,gcc/g++和arm-none-eabi-gcc/g++是两个东西:

Ubuntu 自带的 gcc 编译器是针对 X86 架构的!而我们现在要编译的是 ARM 架构的代码,所以我们需要一个在 X86 架构的 PC 上运行,可以编译 ARM 架构代码的 GCC 编译器,这个编译器就叫做交叉编译器,总结一下交叉编译器就是:
(1)它是一个 GCC 编译器;
(2)这个 GCC 编译器是运行在 X86 架构 PC 上的;
(3)这个 GCC 编译器是编译 ARM 架构代码的,也就是编译出来的可执行文件是在 ARM 芯片上运行的。
交叉编译器中“交叉”的意思就是在一个架构上编译另外一个架构的代码,相当于两种架构“交叉”起来了。

虽然设置界面侦测到了gcc/g++,但build的时候发现这个编译器不对,去找相应的针对arm架构的编译器,也就是arm-none-eabi-gcc/g++,却没找到。也就是Ubuntu里没有arm-none-eabi-gcc/g++。

为了验证,那么在WSL Ubuntu里面运行which命令:

请看which命令的简介:

尝试运行 which arm-none-eabi-gcc 和which arm-none-eabi-g++

结果是没有任何返回

而运行which cmake 和 which gdb看看:

却返回了所在目录👇

所以可以断定是 arm-none-eabi-gcc和arm-none-eabi-g++这两个程序没有安装。

具体arm-none-eabi-gcc这种交叉编译器的名字代表的意思可以去搜索一下,参阅文章:

arm 交叉编译器各种gcc 傻傻分不清楚:gnueabi,gnueabhf,none-eaib - 知乎 (zhihu.com)

        简单来讲,这是要编译 ⌈arm架构的裸机系统程序(包括 ARM Linux 的 boot、kernel,不适用编译 Linux 应用 Application)⌋ 的编译器,但开发的主机环境是别的操作系统,比如windows/Linux/Mac Os,所以叫做交叉编译器。

 3.2 安装arm-none-eabi-gcc/g++

用版本查看命令会提示没有,并提示安装所要使用的命令。

3.2.1 使用命令自动安装

不知道为什么这里的名称顺序是gcc在前了:

sudo apt install gcc-arm-none-eabi 
3.2.2 手动安装

 前往官方下载链接:下载链接icon-default.png?t=N7T8https://launchpad.net/gcc-arm-embedded/+download

先下载再手动安装, 但具体教程请自行搜索

懒人可参考下列文章:

Ubuntu中gcc-arm-none-eabi的安装、移除和版本切换_arm-none-eabi-gcc-CSDN博客

Linux下开发STM32:使用gcc-arm-none-eabi工具链编译生成bin、hex文件-CSDN博客

我是直接用linux命令安装的。

注:用命令安装下载好像文件很大,貌似比在官网下载东西更多,但小白不想折腾可以选自动。

这是执行成功后的提示:

用arm-none-eabi-gcc –v查看版本信息:

用which arm-none-eabi-gcc 查看安装目录:

(除了which, 类似的命令还有Linux查看软件安装目录及位置 方法 - 付杰博客 (fujieace.com)):

这样,再刷新CMake已经可以了:

虽然,工具链设置界面看上去和之前并无任何区别:

3.3 gcc和arm-none-eabi-gcc版本查看

既然都安装好了,可以通过查看版本看二者有何差异:

查看gcc版本, 执行gcc -v :

查看arm-none-eabi-gcc,执行arm-none-eabi-gcc -v:

版本不一样,不是一个东西。

4.build和run

执行build,顺利通过:

run也下载成功:

毕 !!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值