GHOST系统之家 - Windows系统光盘下载网站!
当前位置:GHOST系统之家>系统教程 > Linux 下进行 C 或 C++ 编程时重要的 GCC 标志-linux gcc -c

Linux 下进行 C 或 C++ 编程时重要的 GCC 标志-linux gcc -c

来源:Ghost系统之家浏览:时间:2023-08-08 08:49:22

Linux 下进行 C 或 C++ 编程时重要的 GCC 标志

作者:Linux迷 2023-01-12 23:21:15系统 Linux 在本教程中,我介绍了一些可用于日常编译的最重要的 GCC 标志。我强烈推荐我最后提到的提示,因为它节省了很多时间并且使用起来非常方便。

如果您在 Linux 下进行 C 或 C++ 编程,则必然要采用 GNU GCC 来编译 C 或 C++ 源代码生成可执行程序。

和往常一样,您可以使用标志来扩展功能。

那么让我们看看一些最重要的 GCC 标志。

重要的 GCC 标志

为了便于理解,我将使用以下 C 程序:

#includeint main(void){ printf("\n linuxmi.com \n"); return 0;}

很简单,对吧?不要以此议论我的编程技能哦。

1.使用-o指定输出文件名

在最基本的术语中,您将按如下方式使用 GCC 编译器:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com ⚡ gcc main.c

上面的命令将编译程序并创建一个名称为的可执行文件a.out.:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com ⚡ tree .├── a.out└── main.c0 directories, 2 files

要指定输出可执行文件名,您需要做的就是在文件名后附加-o标志,如下所示:

gcc main.c -o Filename

例如,在这里,我将可执行文件命名为linuxmi:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com ⚡ gcc main.c -o linuxmilinuxmi@linuxmi /home/linuxmi/www.linuxmi.com ⚡ tree.├── a.out├── linuxmi└── main.c0 directories, 3 files

2.使用 -Wall 启用每个警告

如果您想打印每个警告以便您可以检查您的代码并使它比以往更好,请使用该-Wall标志。

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com ⚡ gcc -Wall main.c -o linuxmi

例如,在这里,我将使用不初始化变量的代码:

#includeint main(void){ int i; printf("\n linuxmi.com [%d]\n", i); return 0;}

当我执行代码时,它给了我一条警告‘i’ is used uninitialized:如下图

3.使用 -l 链接共享库

要将 C 程序与共享库链接,您所要做的就是在共享库的名称后附加-l标志。

例如,在这里我将代码 main.c 与共享库链接起来pthread​以生成最终的可执行文件linuxmi:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com ⚡ gcc main.c -o Hello -lpthread

但是如果你想链接外部库怎么办?在这种情况下,您必须使用-L。

例如,在这里,我链接了存储在 /home/linuxmi/LHB 中的共享库“LHB”:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com ⚡ gcc -L/home/linuxmi/LHB -o main.c linuxmi -lLHB

4.仅使用 -E 获取预处理器输出

预处理是编译的第一阶段,如果你只关心第一阶段代码发生了什么,你可以使用-E标志。

在这里,我将标准输出重定向到first-stage.i文件:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com ⚡ gcc -E main.c >first-stage.i

5.使用 -S 获取汇编代码

如果您关心编译期间的程序集输出,可以使用-S标志轻松生成。

在这里,我生成了main.c​名为 as的程序集输出main.s:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com ⚡ gcc -C main.c -o compiled

6.仅使用 -C 生成编译后的代码

要在没有任何链接的情况下获得编译代码,您所要做的就是使用-C标志。

例如,在这里,我main.c​在名为的文件中生成了编译代码compiled:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com ⚡ gcc -C main.c -o compiled

7.使用 -save-temps 生成所有中间文件

之前,我解释了如何获得预处理、汇编和编译的输出,但是如果我告诉您可以一次获得所有这些结果呢?

它非常简单,可以使用-save-temps标志轻松生成。

假设我想为main.c文 件生成所有中间文件,所以我需要遵循给定的命令:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com ⚡ gcc -save-temps main.c

8.使用 -Werror 将警告转换为错误

在测试时,我们程序员往往会忽略可能表明应用程序中存在漏洞和安全威胁的警告。

为了使您的代码坚如磐石,我建议您使用-Werror标志将警告转换为错误。

在这里,我使用的代码会给你一个警告,说“undefined variable c”:

#includeint main(void){char c;// Print the string printf("\n LinuxMi.com [%d]\n", c); return 0;}

但是当我-Werror在执行时使用标志时:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com ⚡ gcc -Wall -Werror main.c -o linuxmi

它没有警告,而是给了我一个错误:

9.使用 -fPIC 获取与位置无关的代码

对于那些处理动态链接的人来说,这个标志可能是至关重要的,尤其是共享库。

在创建共享库时,您应该拥有与位置无关的代码,以便您可以从任何地址而不是静态地址加载共享库。

例如,在这里,我从main.c​创建了一个名为libmain.so的共享库:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com ⚡ gcc -c -Wall -Werror -fPIC main.clinuxmi@linuxmi /home/linuxmi/www.linuxmi.com ⚡ gcc -shared -o libmain.so main.o

10. 使用 -V 获取详细的编译输出

如果您想逐行了解 GCC 对您的代码做了什么,您可以使用该-V标志来获得详细的输出。

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com ⚡ gcc -Wall -v main.c -o linuxmi

奖励认真学习的朋友:使用文件应用 GCC 标志

如果您使用同一组标志来编译程序,拥有一个包含必要选项的文件可以为您节省大量时间。

首先,让我们使用 touch 命令创建一个文件:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com⚡ touch Flags

现在,您可以使用任何您喜欢的文本编辑器来输入标志。只需确保用空格分隔它们即可。

我在文件中保存了 3 个标志:

完成添加标志后,您所要做的就是在文本文件中附加@符号:

如您所见,它将警告转换为错误并创建了所有中间文件。

责任编辑:赵宁宁 来源:Linux迷 编程GCC 标志Linux

推荐系统

  • 电脑公司Ghost Win8.1 x32 精选纯净版2022年7月(免激活) ISO镜像高速下载

    电脑公司Ghost Win8.1 x32 精选纯净版2022年7月(免激活) ISO镜像高速下载

    语言:中文版系统大小:2.98GB系统类型:Win8

    电脑公司Ghost Win8.1x32位纯净版V2022年7月版本集成了自2022流行的各种硬件驱动,首次进入系统即全部硬件已安装完毕。电脑公司Ghost Win8.1x32位纯净版具有更安全、更稳定、更人性化等特点。集成最常用的装机软件,精心挑选的系统维护工具,加上绿茶独有

  • 微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载

    微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载

    语言:中文版系统大小:5.13GB系统类型:Win11

    微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Win11 64位 Office办公版(免费)优化  1、保留 Edge浏览器。  2、隐藏“操作中心”托盘图标。  3、保留常用组件(微软商店,计算器,图片查看器等)。  5、关闭天气资讯。 

  • Win11 21H2 官方正式版下载_Win11 21H2最新系统免激活下载

    Win11 21H2 官方正式版下载_Win11 21H2最新系统免激活下载

    语言:中文版系统大小:4.75GB系统类型:Win11

    Ghost Win11 21H2是微软在系统方面技术积累雄厚深耕多年,Ghost Win11 21H2系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Ghost Win11 21H2是微软最新发布的KB5019961补丁升级而来的最新版的21H2系统,以Windows 11 21H2 22000 1219 专业版为基础进行优化,保持原汁原味,系统流畅稳定,保留常用组件

  • windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载

    windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载

    语言:中文版系统大小:5.31GB系统类型:Win11

    windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载,微软win11发布快大半年了,其中做了很多次补丁和修复一些BUG,比之前的版本有一些功能上的调整,目前已经升级到最新版本的镜像系统,并且优化了自动激活,永久使用。windows11中文版镜像国内镜像下载地址微软windows11正式版镜像 介绍:1、对函数算法进行了一定程度的简化和优化

  • 微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载

    微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载

    语言:中文版系统大小:5.31GB系统类型:Win11

    微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载,微软2022年正式推出了win11系统,很多人迫不及待的要体验,本站提供了最新版的微软Windows11正式版系统下载,微软windows11正式版镜像 是一款功能超级强大的装机系统,是微软方面全新推出的装机系统,这款系统可以通过pe直接的完成安装,对此系统感兴趣,想要使用的用户们就快来下载

  • 微软windows11系统下载 微软原版 Ghost win11 X64 正式版ISO镜像文件

    微软windows11系统下载 微软原版 Ghost win11 X64 正式版ISO镜像文件

    语言:中文版系统大小:0MB系统类型:Win11

    微软Ghost win11 正式版镜像文件是一款由微软方面推出的优秀全新装机系统,这款系统的新功能非常多,用户们能够在这里体验到最富有人性化的设计等,且全新的柔软界面,看起来非常的舒服~微软Ghost win11 正式版镜像文件介绍:1、与各种硬件设备兼容。 更好地完成用户安装并有效地使用。2、稳定使用蓝屏,系统不再兼容,更能享受无缝的系统服务。3、为

  • 雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载

    雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载

    语言:中文版系统大小:4.75GB系统类型:

    雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载在系统方面技术积累雄厚深耕多年,打造了国内重装系统行业的雨林木风品牌,其系统口碑得到许多人认可,积累了广大的用户群体,雨林木风是一款稳定流畅的系统,一直以来都以用户为中心,是由雨林木风团队推出的Windows11国内镜像版,基于国内用户的习惯,做了系统性能的优化,采用了新的系统

  • 雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO

    雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO

    语言:中文版系统大小:5.91GB系统类型:Win7

    雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO在系统方面技术积累雄厚深耕多年,加固了系统安全策略,雨林木风win7旗舰版系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。win7 32位旗舰装机版 v2019 05能够帮助用户们进行系统的一键安装、快速装机等,系统中的内容全面,能够为广大用户