> 技术文档 > Linux 开发:sudo、gcc/g++ 与构建解析_sudo gcc是编译吗

Linux 开发:sudo、gcc/g++ 与构建解析_sudo gcc是编译吗


🌟 快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。🌟 

🚩用通俗易懂且不失专业性的文字,讲解计算机领域那些看似枯燥的知识点🚩 

 在 Linux 系统的使用过程中,权限管理与代码编译是两项重要的操作。本文将详细介绍新建用户使用 sudo 权限的问题以及 gcc/g++ 编译器的使用方法。


目录

         一、之前关于sudo的问题🧐

二、Linux 编译器 - gcc/g++ 使用 ⚙️

2.1 编译的背景知识

2.2 gcc 编译过程详解

2.3 gcc 选项解析

2.4 动态库与静态库 

2.5 Debug 与 Release🛠️


 一、之前关于sudo的问题🧐

在Linux中新建的用户 sudo(提升权限)用不了,如下👇:

权限提升一般由root操作,但是这里是zhangsan(普通用户)操作不在白名单里面,不能用sudo

 如果想使用,得让root将其放入信任白名单里面。

 添加普通用户到白名单里

 


二、Linux 编译器 - gcc/g++ 使用 ⚙️

gcc 编译C语言,g++编译C语言和C++

 

 

2.1 编译的背景知识

编译过程主要分为四个阶段:

  • 预处理(进行宏替换):处理以 “#” 开头的预处理指令,如宏定义、文件包含、条件编译、去注释等📝。
  • 编译(生成汇编):检查代码规范性与语法错误,将代码翻译成汇编语言🧐。
  • 汇编(生成机器可识别代码)把编译阶段生成的汇编文件转化为目标文件💾。
  • 连接(生成可执行文件或库文件):将目标文件与所需函数库链接,生成可执行文件或库文件🔗。

2.2 gcc 编译过程详解

  • 预处理:使用 “gcc -E 要编译的文件 -o 目标文件” 格式,如 “gcc -E hello.c -o hello.i”,“-E” 选项使 gcc 在预处理结束后停止,“-o” 指定目标文件,“.i” 文件为预处理后的 C 原始程序📄。
  • 编译“gcc -S 预处理后的文件 -o 汇编文件”,如 “gcc -S hello.i -o hello.s”,“-S” 选项只进行编译不汇编,生成汇编代码📃。
  • 汇编“gcc -c 汇编文件 -o 目标文件”,如 “gcc -c hello.s -o hello.o”,“-c” 选项将汇编代码转化为二进制目标代码💾。
  • 连接“gcc 目标文件 -o 可执行文件”(默认动态链接),如 “gcc hello.o -o hello”。函数库分为静态库(后缀名 “.a”,编译链接时代码全部加入可执行文件,文件大但运行无需库文件)动态库(后缀名 “.so”,编译链接时不加入代码,运行时加载,节省系统开销,gcc 默认使用动 态库)🔗。

 

2.3 gcc 选项解析

  • 预处理相关“-E” 只激活预处理,需重定向输出➡️。
  • 编译控制“-S” 编译到汇编语言不进行汇编和链接;“-c” 编译到目标代码📏。
  • 输出控制:“-o 文件” 指定输出文件📄。
  • 链接控制“-static” 采用静态链接;“-shared” 尽量使用动态库,生成文件小但需系统有动态库🔗。
  • 优化选项:“-O0” 无优化;“-O1” 为缺省值;“-O2”、“-O3” 优化级别逐渐升高🌟。
  • 调试与警告:“-g” 生成调试信息供 GNU 调试器使用;“-w” 不生成任何警告信息;“-Wall” 生成所有警告信息⚠️。

2.4 动态库与静态库 

 

动态库与静态库的区别👇

 


2.5 Debug 与 Release🛠️

在软件开发中,Debug(调试)和 Release(发布)是不同的构建配置,使用 gcc/g++ 编译时差异明显。默认是release模式

Debug 构建🐛:用于开发阶段,旨在辅助开发者查错。编译时常用 “-g” 选项生成调试信息,方便调试器定位源码行。同时,一般不做过多优化,避免改变代码执行顺序或结构增加调试难度。如 “gcc -g -Wall -O0 hello.c -o hello_debug”,生成含丰富调试信息的可执行文件,便于开发中发现解决问题。

Release 构建🚀:用于面向用户的发布版本,更注重性能与资源占用。编译时通常采用较高优化级别,如 “-O2” 或 “-O3” 提升执行效率,且不生成调试信息以减小文件大小。例如 “gcc -O3 -Wall hello.c -o hello_release”,其运行效率高于 Debug 版本,更适合发布。


了解二者区别并合理运用 gcc/g++ 编译选项,有助于开发者在不同阶段高效开发、发布优质软件,更好地在 Linux 系统开展工作。🌟

 如果在学习过程中有任何疑问或建议,欢迎随时交流分享哦😉! 👉【A Charmer】