【Linux】Linux:sudo 白名单配置与 GCC/G++ 编译器使用指 📅 发布时间:2026/7/11 0:50:55 👁️ 浏览次数: 一、sudo 白名单的配置详解我们在使用普通用户时若想用 root 权限创建文件等操作又不想切换账号就可以借助sudo临时获取 root 权限。但一般情况下普通用户直接用sudo提权会失败这是因为sudo的权限控制由/etc/sudoers文件及相关配置管理普通用户尚未被拥有权限的用户如 root在该文件中配置进 “白名单”即设置好对应的权限规则所以操作会被拒绝。【就像这样的场景】【如何将普通用户加入白名单】由于sudoers文件的拥有者是root所以得使用root用户添加切换root账号打开ect目录下的sudoers文件在图片黄色格子圈的地方按上述示例添加你的用户保存并退出文件后再次尝试上述图片可以看到用root身份创建file文件创建成功二、C/C 开发环境的核心支撑 —— 头文件与库文件我们能在 Windows 或 Linux 上开展 C/C 开发核心原因在于系统中提前或后续安装了C/C 开发相关的头文件和库文件。C/C 开发环境不只是 Visual StudioVS、GCC、G 这些编译工具语言本身的头文件和库文件才是更关键的支撑。像安装 VS2019、VS2022 时选择对应的开发包其实就是在同步下载 C 语言的头文件和库文件。对于编译型语言而言安装开发包必然要下载并安装对应的头文件与库文件而且 C 的头文件和库文件在 Windows 系统上也是存在的。【软件版本的裁剪条件编译的应用】以软件的社区版免费和专业版付费功能更丰富为例提供这些软件的公司并不需要维护两份完全独立的代码。借助条件编译技术公司可以根据不同的编译条件对社区版不需要的功能进行裁剪。比如在代码中通过#ifdef#ifndef等条件编译指令判断当前编译的是社区版还是专业版从而决定是否包含某些专业功能的代码段这样大大减少了代码维护的成本。三、GCC 与 G 的本质区别GCC是 GNU 编译器集合的总称支持 C、C、Java、Fortran 等多种语言当编译 C 代码时它会自动调用 C 编译器。G是 GCC 下专门用于编译 C 代码的工具本质上是 GCC 的一个前端会自动链接 C 标准库如libstdc。核心差异编译.c文件时GCC 会默认按 C 语言语法处理而 G 会默认按 C 语法处理编译.cpp文件时两者都会按 C 语法处理但 G 会自动链接 C 库GCC 则需要手动指定-lstdc选项才能链接 C 库。第一次编译失败是因为没有链接到C的库第二次加入-lstdc选项才链接成功四、编译的四个核心阶段要深入理解 GCC/G 的工作首先得知晓代码从源码到可执行文件的四个关键阶段每一步都在为最终生成可运行程序铺路。4.1 预处理宏替换与代码准备预处理阶段主要负责对源码进行 “初步加工”包括宏替换、头文件展开、条件编译执行以及注释删除等操作。指令示例gcc -E test.c -o test.i-E选项的作用是让 GCC 在完成预处理后就停止后续的编译流程。-o用于指定输出文件这里生成的 test.i文件就是经过预处理后的 C 原始程序里面已经完成了宏替换、头文件包含等操作。4.2 编译生成汇编代码这一阶段GCC 会先严格检查代码的规范性排查语法错误。若代码无误就会将其翻译成汇编语言。指令示例gcc -S test.i -o test.s-S选项能让 GCC 只进行编译不执行后续的汇编步骤最终生成汇编代码文件 test.s我们可以通过查看这个文件来了解代码对应的汇编指令。4.3 汇编生成目标代码汇编阶段是把编译阶段生成的.s汇编文件转换成机器可识别的目标文件.o文件。指令示例gcc -c test.s -o test.o-c选项会让 GCC 完成汇编操作生成二进制格式的目标文件 test.o不过这个目标文件还不能直接执行需要后续的链接步骤。4.4 链接生成可执行文件成功编译后就进入链接阶段。链接的作用是将目标文件与所需的函数库如 C 标准库进行关联最终生成可执行文件。指令示例gcc test.o -o test执行这条命令后GCC 会把目标文件 test.o与系统库等资源链接起来生成可执行文件 test此时就可以直接运行这个程序了。五、函数库静态库与动态库5.1 基础概念与核心特性【静态库】定义编译链接时会将库文件的全部代码嵌入可执行文件。后缀Linux 下通常为.awindows下为.lib。特点生成的可执行文件体积大但运行时不依赖外部库可独立运行。例如若程序链接了静态数学库编译后库代码直接 “打包” 进程序在无对应库的环境中也能运行。【动态库】定义编译链接时仅记录库引用程序运行时由运行时链接器加载库。后缀Linux 下通常为.so**如**libc.so.6**Windows 下为.dll**。特点可执行文件体积小多个程序能共享同一份库代码但运行时依赖库存在。若动态库缺失依赖它的所有程序可能都无法正常运行。5.2 GCC 编译时的链接行为【默认动态链接】GCC 编译生成可执行程序时默认采用动态链接方式。例如代码语言javascriptAI代码解释gcc test.c -o test生成的test是动态链接程序可通过file test验证输出含 “dynamic executable” 字样再用ldd test可查看其依赖的动态库列表。【file指令】功能说明用于辨识文件类型可判断文件是普通文本、可执行程序、压缩包、符号链接等并能分析文件编码、架构等信息。语法file [选项] 文件或目录...常用选项-c详细显示指令执行过程便于排错或分析程序执行的情形。-z尝试去解读压缩文件的内容。【静态链接的实现】:若要强制静态链接需添加-static选项代码语言javascriptAI代码解释gcc -static test.c -o test_static此时程序会链接静态库需系统安装对应静态库包如 CentOS 下可通过a安装静态 C 标准库和 C 标准库。用ldd hello_static验证会显示 “not a dynamic executable”说明无动态库依赖。5.3 链接的特殊情况与混合链接【无静态库时强制静态链接】若系统没有所需静态库却使用-static选项编译会失败。因为静态链接必须找到对应的静态库文件才能完成 “代码嵌入” 操作。【动态库与静态库共存时的链接优先级】当系统同时存在动态库和静态库且 GCC 都能找到时默认优先动态链接。-static的本质是改变链接优先级强制优先选择静态库但这种 “优先级改变” 是 “只适配一次” 的逻辑并非所有依赖都强制静态链接。【混合链接】实际开发中程序可采用混合链接部分模块动态链接部分静态链接。比如对核心功能模块链接静态库以保证独立性对通用功能链接动态库以节省资源但需通过复杂的编译选项或链接脚本精细控制一般在对程序性能、体积和依赖有特殊要求的场景使用。5.4 优缺点对比【动态库】优点资源共享多个程序共享同一份库代码节省磁盘空间、网络空间、和内存空间运行时库只加载一次。更新便捷库更新后只需替换动态库文件无需重新编译所有依赖程序。缺点运行依赖依赖的动态库缺失或版本不兼容时程序无法运行。加载开销运行时加载库会带来一定性能开销虽通常可忽略但对极致性能场景有影响。【静态库】优点独立性强程序不依赖外部库在纯净环境无对应动态库也能运行适合嵌入式设备、严苛运行环境的程序。运行稳定无动态库加载的不确定性运行行为更稳定。缺点体积庞大可执行文件包含库全部代码占用更多磁盘和内存。更新繁琐库更新后所有依赖程序都需重新编译链接。【补充】5.5 扩展知识可执行文件格式与调试构建【可执行文件格式】Linux 下可执行程序采用ELFExecutable and Linkable Format格式并非简单的二进制流而是包含段表、符号表等结构用于程序加载和链接。【debug 与 release 构建】debug 构建编译时添加-g选项如gcc -g hello.c -o hello_debug生成的程序包含调试信息可通过 GDBgdb hello_debug进行单步调试、变量查看等操作。release 构建默认不包含调试信息且可添加优化选项如-O2提升性能gcc -O2 hello.c -o hello_release生成的程序体积小、运行快适合发布。
C语言进阶指南(类型转换、整型提升) 显式转换我们可以将某个表达式强制转换成其他类型。代码语言:cAI代码解释int i 25555;i (unsigned char)i;此时表达式中的i被转换unsigned char类型,数值是211隐形转换我们前面已经了解了浮点数和整数的存储形式是完全不一样的,但是在C语言… 2026/7/9 18:48:18
深入解析C++继承机制 好的,我们来深入解析C中面向对象编程的继承机制。1. 继承的基本概念继承是面向对象编程的核心特性之一,它允许我们定义一个新的类(称为派生类或子类)来继承一个已存在的类(称为基类或父类)的成员࿰… 2026/7/7 13:21:22
【Linux网络】应用层协议HTTP 核心特点 无状态 下面附上一张关于HTTP常见header的表格 字段名 含义 样例 Accept 客户端可接受的响应内容类型 Accept: text/html,application/xhtmlxml,application/xml;q0.9,image/webp,image/apng,/;q0.8 Accept-Encoding 客户端支持的数据压缩格式 Accept-Encodin… 2026/7/10 1:13:00
国内用 PostgreSQL 魔改的数据库超过二十个,哪家敢说自己真正读懂了内核 这个问题在技术圈子里问出来,场面会很尴尬。不是没有人敢回答,而是真正有资格回答的人都知道这个问题的分量。PostgreSQL 的内核代码库累计超过百万行,三十年迭代,全球数百名核心贡献者持续维护。国内拿它来魔改的团队,… 2026/7/11 0:50:32
激光雕刻终极指南:3分钟掌握LaserGRBL完整使用技巧 激光雕刻终极指南:3分钟掌握LaserGRBL完整使用技巧 【免费下载链接】LaserGRBL Laser optimized GUI for GRBL 项目地址: https://gitcode.com/gh_mirrors/la/LaserGRBL 想要开始激光雕刻创作,但面对复杂的软件感到困惑?LaserGRBL这款… 2026/7/11 0:50:32
医疗大模型实战:从15000行Excel病例数据到智能辅诊助手,小白也能学会的收藏版教程! 本文分享了在医疗领域构建智能辅诊助手时,如何处理15000行Excel病例数据并解决知识库构建难题。文章详细介绍了将Excel每一行视为一个切片、实现病例查询和费用统计分析的核心能力,以及提示词在确保AI输出准确性和规范性的重要性。通过数据工程和产品理解… 2026/7/11 0:48:29
终极Windows兼容性解决方案:VisualCppRedist AIO一站式运行库修复工具 终极Windows兼容性解决方案:VisualCppRedist AIO一站式运行库修复工具 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否经常遇到这样的烦恼&… 2026/7/11 0:48:29
当AI“看见“地图,却误以为双方已心意相通 这项由荷兰乌得勒支大学语言与人工智能研究团队完成的研究,于2026年6月以预印本形式发布,论文编号为arXiv:2606.31719,有兴趣深入了解的读者可以通过该编号查询完整论文。两个人对话,真的意味着两个人理解了同一件事吗?… 2026/7/11 0:46:27
从被动监控到穿透式透明:端到端视觉重构赋能武警营区空间智能跃迁 技术白皮书 编制单位:镜像视界浙江科技有限公司 权威资质:国家十四五重点国防时空智能管控课题、镜像视界浙江普陀时空大数据应用技术联合研究院联合攻关、多墙体金属遮挡场景河南省电检院权威认证 合规依据:《T/CPUMT 015—2023 智慧营区应用要求》《武… 2026/7/11 0:46:27
5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 [特殊字符] 5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 🎬 【免费下载链接】zimuku_for_kodi Kodi 插件,用于从「字幕库」网站下载字幕 项目地址: https://gitcode.com/gh_mirrors/zi/zimuku_for_kodi 还记得那个深夜吗?你刚下载… 2026/7/11 0:00:11
工业信号干扰处理与FOD4216光耦应用实战 1. 工业环境中的信号干扰挑战在工业自动化领域,信号采集的准确性直接关系到整个控制系统的可靠性。典型的工业现场充斥着各种干扰源:大功率电机启停产生的电磁干扰、变频器工作产生的高频噪声、继电器触点火花放电,以及长距离传输引入的共模干… 2026/7/11 0:00:11
OpenHarmony 完整项目工程整合规范 + 模块化分层架构(API23+ 标准企业级结构) 摘要前面系列教程覆盖了 ArkUI 组件、路由、生命周期、本地存储、网络请求、Ability 底层全套基础能力,本篇统一梳理标准工程目录分层、模块化拆分、代码复用规范、全局工具统一管理、项目打包权限配置、常见工程报错统一解决方案,形成可直接用于课程设计… 2026/7/11 0:00:11
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/8 20:15:17
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/8 14:25:08