linux C 语言开发 (一) Window下用gcc编译和gdb调试

文章的目的为了记录使用C语言进行linux 开发学习的经历。开发流程和要点有些记忆模糊,赶紧记录,防止忘记。

相关链接:

linux C 语言开发 (一) Window下用gcc编译和gdb调试

linux C 语言开发 (二) VsCode远程开发 linux

linux C 语言开发 (三) 建立云服务器

linux C 语言开发 (四) linux系统常用命令

linux C 语言开发 (五) linux系统目录结构

linux C 语言开发 (六) 程序的编辑和编译(vim、gcc)

linux C 语言开发 (七) 文件 IO 和标准 IO

linux C 语言开发 (八) 进程基础

linux C 语言开发 (九) 进程间通讯--管道

linux C 语言开发 (十) 进程间通讯--信号

.net mvc推荐链接:

  嵌入式 .net mvc 开发(一)WEB搭建-优快云博客

嵌入式 .net mvc 开发(二)网站快速搭建-优快云博客

嵌入式 .net mvc 开发(三)网站内外网访问-优快云博客

​嵌入式 .net mvc 开发(四)工程结构、页面提交显示-优快云博客 ​

嵌入式  .net mvc 开发(五)常用代码快速开发-优快云博客

java android开发  推荐链接:

开源 java android app 开发(一)开发环境的搭建-优快云博客

开源 java android app 开发(二)工程文件结构-优快云博客

开源 java android app 开发(三)GUI界面布局和常用组件-优快云博客

开源 java android app 开发(四)GUI界面重要组件-优快云博客

开源 java android app 开发(五)文件和数据库存储-优快云博客

开源 java android app 开发(六)多媒体使用-优快云博客

开源 java android app 开发(七)通讯之Tcp和Http-优快云博客

开源 java android app 开发(八)通讯之Mqtt和Ble-优快云博客

开源 java android app 开发(九)后台之线程和服务-优快云博客

开源 java android app 开发(十)广播机制-优快云博客

开源 java android app 开发(十一)调试、发布-优快云博客

开源 java android app 开发(十二)封库.aar-优快云博客

一、QT的安装、环境配置和测试

    在win10系统下,我希望可以练习,gcc和gdb的指令。通过mingw530_32工具,我实现了这个想法。由于我有QT软件,不需要单独安装mingw530_32,对环境变量进行了配置,实现了gcc和gdb的调试。

cmd窗口下输入:gcc -v 测试通过

二、gcc和gdb的常用命令

生成可执行文件: gcc test.c -g -o test

启动gdb调试:gdb test

1 .gbd filename   

2.list(l) 查看程序(括号里为print缩写)

3 .break(b) 函数名 在某函数入口处添加断点

4 .break 行号 在指定行添加断点

5 .break 文件名:行号 在指定文件的指定行添加断点

6 .break 行号 if 条件 当条件为真时,在指定行号断点生效

例如 b 5 if i=10

7 .infobreak 查看有设置的断点

8 .delete 断点编号 删除断点

9.run(run) 开始运行程序

10.next(n) 单步运行程序(不进入子函数)

11.step(s) 单步运行程序(进入子函数)

12.continue© 继续运行程序

13.print§ 变量名 查看指定变量值

14.finish 运行程序,直到当前程序结束

15.watch 变量名 对指定变量名进行监控

16.quit(q) 退出gdb

17. where:查看当前位置

18. set var agrs  = x   //输入参数值

<think>我们正在处理个关于在VSCode中配置GCC编译包含Linux环境头文件的C语言代码的问题。 根据用户的问题,我们需要配置VSCode来使用GCC编译C语言代码,并且要包含Linux环境下的头文件。 实际上,在Linux环境下使用GCC编译C语言代码,通常不需要特别配置头文件路径,因为GCC会自动查找系统标准头文件路径(如/usr/include等)。 但是,用户可能是在非Linux环境下(如Windows)想要编译针对Linux的代码,或者需要交叉编译?或者是在Linux环境下但需要指定特定的头文件? 然而,根据用户引用的内容,特别是引用[2]提到了交叉编译环境的配置,引用[1][3][4]分别提到了在Linux下配置C++、在Windows下配置C/C++环境。 用户明确提到“包含Linux环境下的头文件”,所以我们可以理解为: 1. 用户可能是在Linux环境下开发,那么配置GCC编译会直接包含系统头文件,无需额外配置。 2. 用户也可能是在Windows环境下,但希望编译针对Linux的程序(交叉编译),那么就需要配置交叉编译工具链对应的sysroot(包含Linux头文件库)。 由于用户的问题中没有明确说明当前的操作系统,但引用的内容涉及LinuxWindows,我们需要考虑两种情况。 但是,用户最后说:“我想查找在VSCODE中配置通过GCC编译包含Linux环境下的头文件的C语言代码的方法”,结合引用[2]是关于交叉编译的,我们推测用户可能是在非Linux系统(如Windows)上,想要编译针对Linux的C程序(使用Linux的头文件)。 因此,我们将重点放在交叉编译环境的配置上(在Windows上使用GCC交叉编译Linux,通常使用MinGW或Cygwin,但更常见的可能是使用WSL?或者直接使用Linux交叉编译工具链)。 然而,引用[2]提到的是在Linux系统中配置交叉编译(在x86_64的Linux编译arm架构的程序),这与用户的问题不完全匹配。 重新审视用户需求:配置GCC编译包含Linux环境头文件。如果用户是在Linux下,那么直接使用系统自带的gcc即可。如果用户是在Windows下,有两种选择: - 使用WSL(Windows Subsystem for Linux),在WSL中安装gccVSCode的远程开发扩展,直接使用Linux环境。 - 或者配置交叉编译工具链,在Windows编译Linux程序(这需要下载Linux头文件库,并配置交叉编译gcc)。 由于问题没有明确,我们将分别给出两种场景的配置方法: 场景1:在Linux环境下使用VSCode配置GCC编译C语言(包含Linux头文件) 场景2:在Windows环境下使用VSCode配置交叉编译(使用Linux头文件) 但是,用户引用的参考内容中,引用[3][4]都是在Windows下配置MinGW来编译C/C++,但这是编译Windows程序,而不是Linux程序。 因此,我们重点参考引用[2]关于交叉编译的配置,但需要调整为在Windows上配置交叉编译Linux(比如x86_64的Linux)?或者用户可能是在Windows上使用WSL? 考虑到用户要求“包含Linux环境下的头文件”,更直接的方式是使用WSL,因为这样可以直接使用Linux系统的头文件。 因此,我们给出两种方案: 方案A:使用WSL(推荐,因为更简单且直接使用Linux环境) 方案B:配置交叉编译工具链(较复杂) 由于用户的问题中引用了交叉编译的文档(引用[2]),所以我们也需要提及交叉编译的配置。 但是,根据问题的普遍性,我们首先推荐使用WSL(如果用户使用的是Windows 10或11)。 下面我们分别说明: 方案A:使用WSL(Windows Subsystem for Linux) 1. 确保Windows版本支持WSL(Windows 10版本2004或更高,或Windows 11)。 2. 安装WSL:以管理员身份打开PowerShell,运行 `wsl --install`(默认安装Ubuntu)。 3. 安装完成后,设置Linux用户名密码。 4. 在WSL中安装GCC:在打开的Ubuntu终端中运行 `sudo apt update && sudo apt install build-essential` 5. 在Windows上安装VSCode。 6. 安装VSCode的扩展“Remote - WSL”。 7. 在VSCode中,点击左下角的绿色按钮(或使用Ctrl+Shift+P),选择“Remote-WSL: New Window”,这样VSCode就会连接到WSL。 8. 在WSL环境中,打开项目文件夹,安装必要的VSCode扩展(如C/C++扩展)。 9. 编写C代码,然后使用VSCode的终端(此时是WSL的终端)编译:`gcc -o hello hello.c` 这样就可以包含Linux的头文件了。 方案B:在Windows上配置交叉编译工具链(以MinGW-w64为例,但注意:MinGW-w64编译的是Windows程序,而不是Linux程序。如果要编译Linux程序,我们需要使用针对Linux的交叉编译器,例如x86_64-linux-gnu-gcc) 1. 下载Linux交叉编译工具链(例如,从https://toolchains.bootlin.com/ 下载针对目标平台的工具链,或者使用MSYS2中提供的Mingw-w64交叉编译工具链,但通常Mingw-w64是针对Windows的)。 注意:我们需要的是在Windows上运行却能生成Linux程序的GCC(例如,x86_64-linux-gcc)。通常,这样的工具链可以从Linux发行版的交叉编译包中获取,但需要Windows版本。 2. 实际上,在Windows上获取这样的工具链的种方式是使用Msys2或Cygwin,但更直接的是使用预编译的交叉编译器,比如从MinGW-w64的网站或其他来源获取。不过,常见的MinGW-w64是生成Windows程序的。 3. 另种方式是使用TDM-GCC,但它也是针对Windows的。 4. 因此,我们可能需要寻找专门的交叉编译工具链,例如,从https://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/ 获取(但该网站已变更)或者使用https://releases.linaro.org/ 的Linaro GCC,但要注意选择Windows宿主,目标为Linux的版本。 5. 由于配置较为复杂,且需要下载较大的文件,并且用户可能需要特定的架构(如x86_64或arm),这里我们以x86_64为例,假设我们下载了x86_64-linux-gnu-gccWindows版本(可能需要自己编译或寻找第三方编译好的版本)。 6. 配置步骤: - 下载并解压交叉编译工具链到Windows的某个目录(例如:C:\gcc-linux-x86_64)。 - 将bin目录(例如:C:\gcc-linux-x86_64\bin)添加到系统PATH环境变量。 - 在VSCode中,安装C/C++扩展。 - 创建个C程序,然后配置tasks.json文件,使用x86_64-linux-gnu-gcc编译。 - 同时,需要配置sysroot(包含Linux的头文件库)。我们可以从某个Linux系统中复制头文件库,或者下载sysroot(例如,使用工具链自带的sysroot,或者单独下载)。 - 在tasks.json中,设置gcc命令时指定sysroot:例如 `x86_64-linux-gnu-gcc --sysroot=/path/to/sysroot -o hello hello.c` (注意:在Windows上,路径要使用反斜杠或正斜杠,但通常使用正斜杠或双反斜杠) - 由于在Windows上,sysroot的路径应写Windows的路径,例如:`--sysroot=C:/path/to/sysroot` 但是,由于方案B的复杂性,以及工具链获取的困难,对于大多数用户我们推荐方案A(使用WSL)。 因此,我们将主要步骤集中在方案A。 另外,如果用户就是在Linux系统下,那么配置非常简单: 1. 安装VSCode(官网下载.deb或.rpm包,或者通过snap安装) 2. 安装C/C++扩展。 3. 安装GCC:在终端运行`sudo apt install build-essential`(Debian/Ubuntu)或其他发行版的相应命令。 4. 在VSCode中打开项目,编写代码,然后使用终端运行gcc命令即可。 综上所述,我们给出以下步骤(以推荐方案A为例,假设用户使用Windows): ### 在VSCode中配置GCC编译包含Linux环境头文件的C语言代码(使用WSL) 1. **启用WSL**: - 以管理员身份打开PowerShell,输入以下命令启用WSL功能: ```powershell wsl --install ``` 默认会安装Ubuntu发行版。如果需要其他发行版,可参考Microsoft文档[^5]。 - 重启计算机。 - 安装完成后,打开Ubuntu应用,完成初始化设置(创建用户名密码)。 2. **在WSL中安装GCC**: - 在Ubuntu终端中,更新包列表并安装GCC: ```bash sudo apt update sudo apt install build-essential ``` 这将安装gcc、g++make等工具。 3. **安装VSCodeRemote-WSL扩展**: - 在Windows上安装VSCode(如果尚未安装)。 - 在VSCode扩展市场中搜索并安装“Remote - WSL”扩展。 4. **在WSL中开发**: - 在VSCode中,按`Ctrl+Shift+P`打开命令面板,输入“Remote-WSL: New WSL Window”,选择后会打开个新的VSCode窗口。 - 此时VSCode右下角显示“WSL: Ubuntu”,表示已连接到WSL。 - 安装C/C++扩展(在WSL窗口中,需要重新安装扩展,点击扩展并选择“Install in WSL: Ubuntu”)。 - 打开个文件夹(可以是Windows文件系统中的文件夹,但VSCode会自动将其挂载到WSL中,路径为`/mnt/c/...`,但建议使用WSL自己的文件系统,比如`~/project`,这样性能更好)。 - 创建个C文件,例如`hello.c`。 - 按`Ctrl+Shift+`` `打开集成终端(此时是WSL的bash),输入编译命令: ```bash gcc hello.c -o hello ``` - 运行: ```bash ./hello ``` 5. **配置VSCode的构建任务(可选)**: - 如果需要使用VSCode的任务功能,可以配置tasks.json。 - 按`Ctrl+Shift+P`,输入“Tasks: Configure Task”,选择“Create tasks.json file from templates”,然后选择“Others”。 - 编辑tasks.json文件,例如: ```json { "version": "2.0.0", "tasks": [ { "label": "build with gcc", "type": "shell", "command": "gcc", "args": [ "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}" ], "group": { "kind": "build", "isDefault": true } } ] } ``` - 然后按`Ctrl+Shift+B`即可构建。 6. **配置调试(可选)**: - 在WSL中,确保已经安装了gdb(在安装build-essential时通常已包含)。 - 在VSCode中,切换到调试视图,点击“create a launch.json file”,选择“C++ (GDB/LLDB)”,然后选择“gcc build and debug active file”。 - 这会生成launch.json文件,通常不需要修改即可调试。 这样,用户就可以在Windows系统上使用VSCode,通过WSL中的GCC编译调试C语言程序,并且使用的是Linux环境下的头文件。 如果用户确实需要交叉编译(例如,在Windows编译Linux程序而不使用WSL),那么可以参考引用[2]中的部分思路,但需要针对Windows平台调整: 1. 下载Windows版本的交叉编译工具链(例如,x86_64-linux-gnu-gcc)。 2. 下载目标Linux系统的sysroot(包含头文件库)。 3. 在VSCode中配置tasks.json,指定交叉编译器的路径sysroot参数。 4. 配置includePath(在c_cpp_properties.json中)指向sysroot中的头文件。 但这个过程比较复杂,而且工具链的获取sysroot的准备可能需要较多步骤,这里不详细展开。 最后,根据用户的要求,我们需要生成相关问题: §§相关问题§§ 1. 如何在Windows系统中使用VSCode调试运行在Linux上的C程序? 2. 如何配置VSCode进行C语言的交叉编译(从Windows到ARM Linux)? 3. 在WSL中使用VSCode开发C程序有哪些优缺点? 注意:我们在回答中引用了参考内容,但用户提供的引用[1]到[4]并没有直接提供交叉编译Linux环境的完整方法,所以我们主要依据标准配置方法进行说明。但是,我们在回答中提到了交叉编译,并参考了引用[2]的交叉编译思路。 引用标识:我们在回答中提到了引用[2](关于交叉编译环境配置)引用[5](Microsoft的WSL文档),但引用[5]不是用户给的,所以我们只能标注用户给的引用。不过,用户给的引用[2]是关于Linux系统下配置C++交叉编译,与我们的交叉编译部分相关,因此我们在回答中提到引用[2]时标注[^2]。 因此,在回答中我们可以这样标注: - 在方案B中提到交叉编译时,可以标注引用[2]。 - 其他步骤没有直接引用,但用户引用的内容作为背景知识。 但是,我们的推荐方案(WSL)并没有直接引用用户提供的参考内容,所以可能不需要标注。如果需要标注,我们可以标注引用[1](因为它提到Linux下配置C++环境)引用[2](交叉编译环境)。 然而,用户的问题要求“引用的段落末尾自然地添加引用标识”,因此我们在提到交叉编译配置时,可以这样写: 此外,如果用户希望不依赖WSL,而是通过配置交叉编译工具链在Windows上直接编译Linux程序,可以参考引用[2]中关于交叉编译环境配置的部分思路[^2],但需要针对Windows平台进行调整。 最后,请注意,用户可能是在Linux环境下,那么配置就更简单了(如引用[1]所述[^1])。 因此,我们总结回答如下: 根据您的需求,在VSCode中配置GCC编译包含Linux环境头文件的C语言代码,我们推荐使用Windows子系统Linux(WSL)方案(如果您使用Windows),具体步骤如下: ...(详细步骤如上) 如果您已经在Linux操作系统下,那么直接使用系统自带的GCC即可,如引用[1]所述[^1]。 对于交叉编译方案(在Windows编译Linux程序),可以参考引用[2]的思路[^2]进行配置,但需自行下载Windows版本的Linux交叉编译工具链sysroot。 相关问题: 1. 如何在Windows系统中使用VSCode调试运行在Linux上的C程序? 2. 如何配置VSCode进行C语言的交叉编译(从Windows到ARM Linux)? 3. 在WSL中使用VSCode开发C程序有哪些优缺点? </think>### 在VSCode中配置GCC编译包含Linux环境头文件的C语言代码方法 以下是针对Linux操作系统环境的配置方法(Windows系统通过WSL可实现类似效果): #### 基础配置步骤 1. **安装必备组件** - 安装GCC编译器: ```bash sudo apt update && sudo apt install build-essential ``` - 安装VSCode C/C++扩展:在扩展商店搜索安装`C/C++`(Microsoft官方扩展) 2. **配置环境变量** 确保GCC在系统路径中(通常安装后自动配置),终端验证: ```bash gcc --version # 应显示GCC版本信息 ``` 3. **配置头文件路径** Linux标准头文件(如`<stdio.h>`, `<unistd.h>`)默认位于: - `/usr/include` - `/usr/local/include` **无需手动添加**,GCC会自动搜索这些路径[^1]。 #### 项目特定配置 1. **创建`c_cpp_properties.json`** 按`Ctrl+Shift+P` → 输入`C/C++: Edit Configurations (JSON)`,添加: ```json { "configurations": [{ "name": "Linux", "includePath": [ "${workspaceFolder}/**", "/usr/include/**" // 显式声明系统头文件路径(可选) ], "compilerPath": "/usr/bin/gcc" }], "version": 4 } ``` 2. **配置编译任务(`tasks.json`)** 按`Ctrl+Shift+P` → 输入`Tasks: Configure Task` → 选择`gcc`,修改为: ```json { "version": "2.0.0", "tasks": [{ "label": "gcc build", "type": "shell", "command": "gcc", "args": [ "-g", // 生成调试信息 "${file}", // 当前文件 "-o", // 输出文件 "${fileDirname}/${fileBasenameNoExtension}", "-I/usr/include", // 显式包含系统头文件(冗余但确保覆盖) "-Wall" // 启用所有警告 ], "group": { "kind": "build", "isDefault": true } }] } ``` > 注:`-I`参数通常不需显式添加,此处仅为特殊需求演示[^3][^4]。 #### 验证配置 1. 创建测试文件`test.c`: ```c #include <stdio.h> #include <unistd.h> // Linux特有头文件 int main() { printf("PID: %d\n", getpid()); return 0; } ``` 2. 按`Ctrl+Shift+B`编译 → 终端执行: ```bash ./test # 输出示例: PID: 12345 ``` #### 特殊场景处理 - **自定义头文件路径** 若需添加第三方头文件(如`/opt/custom/include`): 1. 在`c_cpp_properties.json`的`includePath`中添加路径 2. 在`tasks.json`的`args`中添加`-I/opt/custom/include` - **交叉编译配置** 需安装交叉编译工具链(如`gcc-arm-linux-gnueabihf`),并在: - `compilerPath`中指定交叉编译器路径(如`/usr/bin/arm-linux-gnueabihf-gcc`) - `tasks.json`的`command``args`中使用交叉编译命令[^2] > **关键提示**:标准Linux头文件已通过`build-essential`安装,GCC默认包含其路径,无需额外配置即可编译[^1][^4]。 --- ### 相关问题 1. 如何在Windows系统的VSCode中通过WSL编译Linux C程序? 2. 如何解决VSCode中`#include <linux/*.h>`头文件报错的问题? 3. 如何配置VSCode调试使用Linux系统头文件的C程序? [^1]: [VSCode配置C/C++环境教程](引用4) [^2]: [Linux下配置C++交叉编译环境](引用2) [^3]: [配置C语言编译环境教程](引用3) [^4]: [VSCode配置C++编译调试环境](引用1)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值