背景信息:
笔者第一次接触C语言是在大一学校开设的C语言程序设计课上,使用教材是国内高校老师编著的。
Windows 系统,IDE 是 Microsoft Visual C++ 6.0,简称 VC6.0,是微软于1998年推出的一款 C++ 编译器。
当时,没学习过计算机科学导论,计算机组成原理,也不知道 Linux 为何物。就这样期末考了 80+
现在回炉重造!
Windows 系统下使用 WSL 和 VSCode 调试 C/C++ 代码,这是折中方案。
WSL(Windows Subsystem for Linux)是一个在Windows 10上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。
它是由Microsoft与Canonical公司合作开发,其目标是使纯正的Ubuntu 14.04 "Trusty Tahr"映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。
必备知识:
Linux下gcc 编译C语言
1.创建一个.C文件
vi/vim hello.c
2.编译 hello.c文件,生成可执行文件
gcc hello.c
3.执行文件,在默认情况下产生的可执行程序名为 a.out
./a.out
4.通常可以通过 gcc 的“-o”选项来指定自己的可执行程序名称。
gcc -o hi hello.c
生成可执行程序名为 hi
./hi
5.使用gcc的“-c”标记来编译支持库代码(对多个文件进行编译)
gcc -c hello.c
输出结果为一个名为 hello.o 的文件
Windows 10下安装WSL官方教程:https://docs.microsoft.com/zh-cn/windows/wsl/install-win10
编辑器有两种方案:
- Vim 或 Emacs
- Visual Studio Code 官方教程:https://code.visualstudio.com/
接下来在 VSCode 安装必备插件:
- Remote - WSL
- C/C++
注意:点击 VSCode 左下角的 WSL:Ubuntu,选择 Remote-WSL:Reopen Folder in WSL
使用 VSCode 编辑代码 与远程连接WSL:Ubuntu,在 Linux 下 gcc 编译 和 gdb 调试
坑1:VSCode 是用来编辑代码,一定要保持在远程连接状态。
理清思路,不要在本地新建文件夹保存代码,要完全按照 Linux 操作习惯
$ mkdir chapter_03
确保 gcc 和 gdb 安装成功
~$ whereis gcc gcc: /usr/bin/gcc
~$ whereis gdb gdb: /usr/bin/gdb
笔者第一次配置方案,不推荐,会有很多意想不到的报错,焦头烂额,根本没法专心写代码
下面是第一次使用 VSCode 中 C/C++ 编译插件需要配置的文件,launch.json
坑2,使用 VSCode 编辑,在终端 gcc 编译,报错
$ cd chapter_03 $ ls frist.c
$ gcc frist.c /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o: in function `_start': (.text+0x24): undefined reference to `main' collect2: error: ld returned 1 exit status
源文件如下:
#include<stdio.h> int main(void){ printf("test gcc..."); return 0; }
解决方案:
$ gcc -Wall -g -c frist.c $ gcc -Wall -g frist.o -o frist $ ./frist test gcc...
进一步学习 gcc 参数
gcc 是 GNU 的 c 编译器,gcc 在执行编译工作的时候,总共需要4步:
- 预处理,生成 .i 的文件 [预处理器cpp]
- 将预处理后的文件转换成汇编语言, 生成文件 .s [编译器egcs]
- 有汇编变为目标代码(机器代码) 生成 .o 的文件 [汇编器as]
- 连接目标代码, 生成可执行程序 [链接器ld]
-g // 只是编译器,在编译的时候,产生调试信息。
-c // 只激活预处理,编译,和汇编,也就是只把程序做成obj文件
接“第一次使用 VSCode 中 C/C++ 编译插件需要配置的文件”,更新配置文件,
达到 VSCode 编辑,Ctrl + Shift + B 编译,Ctrl + F5 调试 的效果
首先,打开WSL,Ubuntu
出现的首行欢迎语:Welcome to Ubuntu 20.04 LTS (GNU/Linux 4.4.0-18362-Microsoft x86_64)
然后,输入如下示例命令:
~$ cd c_primer_plus/ ~/c_primer_plus$ ls chapter_02 chapter_03 chapter_04 chapter_05 ~/c_primer_plus$ mkdir chapter_06 ~/c_primer_plus$ cd chapter_06 ~/c_primer_plus/chapter_06$ mkdir Demo ~/c_primer_plus/chapter_06$ mkdir Practise ~/c_primer_plus/chapter_06$ ls Demo Practise
首次用 VSCode 编辑,示例
然后,先点击最下面 Configure Default Build Task
然后,选择第一个
就有如下代码,无需改动
然后,Ctrl + Shift + B
解放双手吧,接下来就是 Ctrl + F5 调试,自然是不行滴,先简单配置一下
重点来了,选择最下面的配置
留意此处的修改,WorkSpaceFolder 后新增 Demo,
再根据编译后生成的文件后缀不同,添加 a.out,或 fileBasenameNoExtension
再 Ctrl + F5,调试,大功告成!
受此启发:https://blog.csdn.net/Hyz8970/article/details/101627753