linux复习5:C prog
编辑

缩排

为了使C源代码更加整洁易读,可以使用一些工具来自动格式化代码,例如cb(C程序美化器)、bcpp(C++美化器)和indent等。
编译


编译并链接C文件
gcc hello.c -o hello
将 hello.c 编译并链接成可执行文件 hello
指定输出文件名
gcc -o hello hello.c
与上一条命令相同,明确指定了输出文件名为 hello。
预处理
gcc -E hello.c -o hello.i
只进行预处理阶段,生成预处理后的文件 hello.i。
生成汇编代码
gcc -S hello.i -o hello.s
将预处理后的文件 hello.i 编译成汇编代码文件 hello.s。
生成目标文件
gcc -c hello.s -o hello.o
将汇编代码文件 hello.s 汇编成目标文件 hello.o。
链接目标文件
gcc hello.o -o hello
将目标文件 hello.o 链接成最终的可执行文件 hello。
指定输入文件类型
gcc -xc hello.tom
强制将 hello.tom 作为C语言源文件处理。-xc 选项告诉 gcc 将输入文件视为C语言源文件,即使其扩展名不是 .c。

-
-w
关闭所有的警告信息。这对于忽略所有警告并专注于错误信息的情况非常有用,但通常不推荐这样做,因为警告往往能帮助发现潜在的问题。 -
-Wall
打开许多常见的警告信息,但并不是所有的警告。这是最常用的选项之一,因为它能够捕获大多数常见的编程错误和不良实践。 -
-Wno-
可以后面接具体的警告名称来关闭特定的警告。例如,-Wno-unused会关闭未使用的变量或函数的警告。 -
-Wall -Wno-unused
即使开启了-Wall,也可以通过-Wno-unused来关闭未使用的变量或函数的警告。这样可以保持其他警告开启,同时忽略某些特定的警告。 -
-Wall -Wno-implicit
关闭隐式函数声明的警告。隐式函数声明是指没有显式声明就调用的函数,默认情况下 GCC 会发出警告,因为这可能导致类型不匹配的问题。 -
-Wall -Werror
将所有的警告当作错误处理。这意味着任何警告都会导致编译失败。这对于确保代码质量非常有用,特别是在持续集成环境中,可以强制开发者修复所有警告。 -
-Wall -Wextra
在-Wall的基础上增加更多的警告信息。-Wextra会启用一些额外的警告,比如未初始化的变量等,这些警告在-Wall中是默认关闭的。


库文件

库文件是包含预编译代码的文件,这些代码可以被多个程序重复使用。库文件通常分为静态库和动态库两大类。
-
静态库:
- 静态库在编译阶段会被链接到目标代码中,成为可执行文件的一部分。这意味着每次创建可执行文件时,静态库中的代码都会被复制一份到最终的二进制文件中。
- 静态库的扩展名通常是 .a(在Unix/Linux系统)或 .lib(在Windows系统)。
-
动态库:
- 动态库(也称为共享库)在程序运行时才被加载到内存中。多个使用相同动态库的程序可以共享内存中的同一份副本,这有助于节省系统资源。
- 在Unix/Linux系统中,动态库的扩展名通常是 .so;而在Windows系统中,则是 .dll。
调试

编译源代码
gcc -g string-debug.c -o a.out
-
-g选项告诉gcc为生成的可执行文件添加调试信息。 -
-o a.out指定输出文件名为a.out。
2. 启动 GDB 并加载可执行文件
gdb a.out
这会启动 GDB 并加载 a.out 可执行文件。
3. 装入被调试的可执行文件
file a.out
虽然你在启动 GDB 时已经指定了 a.out,但这个命令可以确保当前调试的是正确的文件。
4. 列出源代码
list
这会显示当前文件的前 10 行源代码。你可以使用 list n 来显示从第 n 行开始的代码。
5. 运行程序
run
这会启动程序并运行直到遇到断点或异常。
6. 查看调用栈
where
这会显示当前的调用栈,帮助你了解程序的执行路径。
7. 打印变量值
print string
这会显示 string 变量的当前值。
8. 设置断点
break string-debug.c:7
这会在 string-debug.c 文件的第 7 行设置一个断点。
9. 再次运行程序
run
这会重新启动程序,并在设置的断点处暂停。
10. 修改变量值
set variable string=(char*)malloc(100)
这会将 string 变量的值设置为通过 malloc 分配的 100 字节的内存地址。
11. 单步执行
next
这会执行下一行代码,但不会进入函数内部。如果你希望进入函数内部,可以使用 step 命令。
相关文章:
linux复习5:C prog
编辑 缩排 为了使C源代码更加整洁易读,可以使用一些工具来自动格式化代码,例如cb(C程序美化器)、bcpp(C美化器)和indent等。 编译 编译并链接C文件 gcc hello.c -o hello 将 hello.c 编译并链接成可执行文…...
Go语言24小时极速学习教程(三)常见标准库用法
常见标准库 常见标准库即Go语言自带的库,这里的所有包都可以通过import直接引入,如果你觉得实在是不好用,那么请先保证你学会了标准库的基础上,再学一下Gookit,特别是其中的GoUtil,千万不要轻易自己去造轮…...
大数据环境下的高效数据清洗策略
大数据环境下的高效数据清洗策略 在当今这个信息爆炸的时代,大数据已成为企业决策和科学研究不可或缺的重要资源。然而,数据的海量性、多样性和复杂性也给数据处理带来了前所未有的挑战,其中数据清洗是确保数据质量和后续分析准确性的关键步…...
基于SpringBoot3+mybatis搭建的历史上的今天API接口服务 及 Mybatis 应该有个更好的方法来隐藏 Pojo 类中的字段
一、Mybatis有没有比较好的方法隐藏 Pojo 类中的字段 使用 Mybatis 时,为了实现通用的CURD,在定义实体类pojo时,会尽量将能用得上的数据库字段都定义到 pojo中,但是在查询的时候却有不一样的需求。mybatis的文档地址链接ÿ…...
Python 3 字符串
Python 3 字符串 字符串在Python中是一种基本的数据类型,用于存储文本数据。Python中的字符串是不可变的,这意味着一旦创建了一个字符串,就不能更改其内容。字符串可以用单引号()、双引号("ÿ…...
Android集成FCM(Firebace Cloud Messaging )
集成FCM官方文档 Firebace主页面 将 Firebase 添加到您的 Android 应用 1、进入Firebace页面,创建自己的项目 2、点击自己创建好的项目,在右侧选择Cloud Messaging 3、点击Android去创建 google-services.json 4、将下载的 google-services.json 文件…...
基于 RBF 神经网络辨识的单神经元 PID 模型参考自适应控制
这是一个基于 RBF 神经网络辨识 和 单神经元 PID 模型参考自适应控制 的系统框图,包含以下主要部分: RBF 神经网络模块:用于对系统进行辨识,输入误差 e(t)e(t)e(t) 和误差变化量 Δe(t)\Delta e(t)Δe(t),输出与系统特…...
2024年 Web3开发学习路线全指南
Web3是一个包含了很多领域的概念,不讨论币圈和链圈的划分,Web3包括有Defi、NFT、Game等基于区块链的Dapp应用的开发;也有VR、AR等追求视觉沉浸感的XR相关领域的开发;还有基于区块链底层架构或者协议的开发。 这篇文章给出的学习路…...
Ubuntu22.04LTS 部署前后端分离项目
一、安装mysql8.0 1. 安装mysql8.0 # 更新安装包管理工具 sudo apt-get update # 安装 mysql数据库,过程中的选项选择 y sudo apt-get install mysql-server # 启动mysql命令如下 (停止mysql的命令为:sudo service mysql stop࿰…...
「Mac玩转仓颉内测版23」基础篇3 - 深入理解整数类型
本篇将详细讲解Cangjie中的整数类型,探讨整数的定义、操作、表示范围、进制表示、类型转换及应用场景,帮助开发者在Cangjie中灵活运用整数类型构建程序逻辑。 关键词 有符号整数与无符号整数表示范围与溢出进制表示类型转换字面量与操作 一、整数类型概…...
渗透测试导学
渗透测试导学 渗透测试概念 渗透测试是干什么? 渗透测试的定义和目的:渗透测试是一种通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全性能的评估方法。它的目的是通过识别安全问题,帮助了解当前的安全状况,从而…...
Django实现智能问答助手-基础配置
设置 Django 项目、创建应用、定义模型和视图、实现问答逻辑,并设计用户界面。下面是一步一步的简要说明: 目录: QnAAssistant/ # 项目目录 │ ├── QnAAssistant/ # 项目文件夹 │ ├── init.py # 空文件 │ ├── settings.py # 项目配…...
亚马逊商品详情API接口解析,Json数据示例返回
亚马逊的商品详情API接口(如Amazon Product Advertising API)允许开发者获取商品的详细信息,包括价格、描述、图片URL等。以下是一个示例的JSON数据返回结构,以及相应的解析说明。请注意,实际返回的数据结构可能会根据…...
git根据远程分支创建本地新分支
比如我当前本地仓库有4个 remote 仓库,我希望根据其中的一个 <remote>/<branch> 创建本地分支: 先使用 github fetch <remote> 拉取 <remote> 的分支信息,然后在 git checkout -b 创建新分支时使用 -t <remote>…...
Android U 多任务启动分屏——SystemUI流程(更新中)
前文 Android U 多任务启动分屏——Launcher流程(下分屏) 前文说到通过ISplitScreen接口跨进程调用到了SystemUI进程,我们继续分析分屏在systemui中的实现。 wmshell实现分屏 实现ISplitScreen接口 代码路径:frameworks/base/…...
使用SaaS化的Aurora应用快速搭建私人ChatGPT助手
使用SaaS化的Aurora应用快速搭建私人ChatGPT助手 简介: Aurora是一个带UI且免费的GPT私人聊天助手,可切换GPT-3.5,4,4o等常用版本。用户可通过部署Aurora,快速打造自己专属的AI助手。阿里云计算巢已将Aurora打包为SaaS…...
.NET 9与C# 13革新:新数据类型与语法糖深度解析
记录(Record)类型 使用方式: public record Person(string FirstName, string LastName); 适用场景:当需要创建不可变的数据结构,且希望自动生成 GetHashCode 和 Equals 方法时。不适用场景:当数据结构需…...
2.fs文件系统模块
文章目录 [TOC](文章目录)2.5.练习-成绩管理2.5.1在files文件夹下新建成绩.txt文件2.5.2.新建对应的js文件 2.6.fs模块-路径动态拼接的问题 3.path路径模块3.1什么是path路径模块3.2.路径拼接3.3.获取路径中的文件名3.4.获取路径中的文件扩展名3.5.案例3.5.1.步骤13.5.2.调用fs…...
Ubuntu24.04LTS设置root用户可远程登录
Ubuntu24.04LTS设置root用户可远程登录 文章目录 Ubuntu24.04LTS设置root用户可远程登录1. 设置root密码2. 设置root用户可远程登录1. 查看ssh服务是否安装2. 安装ssh服务3. 再次查看ssh服务是否安装4. 配置ssh文件5. 重启ssh服务6. root远程登录 1. 设置root密码 Ubuntu安装后…...
ROS2指令总结(跟随古月居教程学习)
博主跟随古月居博客进行ROS2学习,对ROS2相关指令进行了总结,方便学习和回顾。 古月居ROS2博文链接:https://book.guyuehome.com/ 本文会持续进行更新,觉得有帮助的朋友可以点赞收藏。 1. ROS2安装命令 $ sudo apt update &am…...
3步搞定Qobuz高品质音乐下载:QobuzDownloaderX-MOD完全指南 [特殊字符]
3步搞定Qobuz高品质音乐下载:QobuzDownloaderX-MOD完全指南 🎵 【免费下载链接】QobuzDownloaderX-MOD Downloads streams directly from Qobuz. Experimental refactoring of QobuzDownloaderX by AiiR 项目地址: https://gitcode.com/gh_mirrors/qo/…...
QuPath生物图像分析终极指南:从零基础到高效病理研究
QuPath生物图像分析终极指南:从零基础到高效病理研究 【免费下载链接】qupath QuPath - Bioimage analysis & digital pathology 项目地址: https://gitcode.com/gh_mirrors/qu/qupath QuPath是一款功能强大的开源生物图像分析软件,专门为数字…...
从零构建一个轻量级WebSocket服务器:基于libwebsockets的实战与事件循环剖析
从零构建一个轻量级WebSocket服务器:基于libwebsockets的实战与事件循环剖析 在当今实时应用盛行的时代,WebSocket技术已成为构建即时通讯、实时数据推送等功能的基石。不同于传统的HTTP请求-响应模式,WebSocket提供了全双工通信能力…...
springboot汽车配件商城销售管理系统
目录系统架构设计数据库设计核心功能实现销售管理模块库存预警功能报表统计模块系统测试策略部署方案项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作系统架构设计 采用SpringBoot作为后端框架,搭配MyBatis或JPA实现…...
毕业设计模板:新手入门级全栈项目结构与避坑指南
很多同学在做毕业设计时,常常会遇到这样的场景:项目初期雄心勃勃,但写着写着就发现代码越来越乱,前后端耦合在一起,想加个新功能都无从下手,最后只能硬着头皮交一个“能跑就行”的“缝合怪”项目。今天&…...
CSS线性渐变实战:5分钟搞定炫酷按钮背景(附完整代码)
CSS线性渐变实战:5分钟搞定炫酷按钮背景(附完整代码) 最近在重构一个企业官网时,产品经理突然要求把所有按钮的纯色背景换成"更有设计感"的效果。面对30多个不同尺寸的按钮,手动设计图片背景显然不现实。这时…...
5大突破:抖音音乐批量下载与智能管理解决方案
5大突破:抖音音乐批量下载与智能管理解决方案 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 在数字内容创作与音乐收藏领域,高效获取和管理抖音平台的音频资源一直是用户面临的核心挑…...
KDE vs直方图:7个真实数据集对比告诉你何时该用核密度估计
KDE vs直方图:7个真实数据集对比揭示核密度估计的最佳实践 在数据分析的日常工作中,我们常常需要快速理解数据的分布特征。直方图作为最基础的分布可视化工具,几乎成为每个数据分析师的第一选择。但当我第一次在电商用户行为分析中遇到双峰分…...
多平台网络资源捕获工具:突破下载限制的技术实现与场景化应用
多平台网络资源捕获工具:突破下载限制的技术实现与场景化应用 【免费下载链接】res-downloader 资源下载器、网络资源嗅探,支持微信视频号下载、网页抖音无水印下载、网页快手无水印视频下载、酷狗音乐下载等网络资源拦截下载! 项目地址: https://gitc…...
从零开始学流程图:GESP C++二级考试中的三种基本结构详解
从零开始学流程图:GESP C二级考试中的三种基本结构详解 在编程学习的道路上,流程图就像是一张清晰的地图,能够帮助初学者直观地理解程序运行的逻辑路径。特别是对于准备GESP C二级考试的考生来说,掌握流程图的绘制和解读技巧&…...
