新用户注册入口 老用户登录入口

[转载][GCC for C]编译选项---IDE掩盖下的天空

文章作者:转载 更新时间:2023-06-29 13:05:13 阅读数量:51
文章标签:gcc编译选项源文件可执行文件链接-c 参数
本文摘要:本文详细介绍了使用gcc编译器对C语言源代码进行编译的各种选项和流程,包括从单个源文件生成可执行文件、预处理及生成汇编语言文件。文章阐述了如何创建静态库(.a文件)和共享库(.so文件),以及覆盖默认文件命名约定的方法。此外,还提及了通过gcc命令行参数提取函数原型以生成头文件的技巧。关键词:gcc编译器、源文件、目标文件、可执行文件、预处理、汇编语言、静态库、共享库、命名约定、头文件。
转载文章

本篇文章为转载内容。原文链接https://blog.csdn.net/szu030606/article/details/7212586。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

编译选项

---------IDE掩盖下的天空

/***************************************
 * gcc for c language
 ***************************************/

Single Source to Executable
$ gcc helloworld.c [-o howdy]
默认生成的名字a.exe
______________________________________
Source File to Object File
$ gcc -c helloworld.c [-o harumph.o]
默认生成的名字与原文件名一致,后缀为.o
-c告知不但保留object文件,而且忽略连接过程
______________________________________
Multiple Source Files to Executable
$ gcc hellomain.c sayhello.c -o hello
______________________________________
Preprocessing
$ gcc -E helloworld.c [-o helloworld.i]
默认不输出文件,若输出则为.i文件
-E把宏展开后的代码情况
____________________________________
Generating Assembly Language
$ gcc -S helloworld.c
-S生成hellowordl.s汇编语言文件
____________________________________
Creating a Static Library
1、生成.o文件
$ gcc -c hellofirst.c hellosecond.c
2、生成.a文件
$ ar -r libhello.a hellofirst.o hellosecond.o
注意静态库的命名规则
3、连接
$ gcc twohellos.c libhello.a -o twohellos
____________________________________
Creating a Shared Library
1、生成.o文件
$ gcc -c -fpic shellofirst.c shellosecond.c
-fpic 使得.o输出模块以地址可定向的方式产生。[pic:position independent code]
2、生成.so
$ gcc -shared shellofirst.o shellosecond.o -o hello.so
3、连接
$ gcc stwohellos.c hello.so -o stwohellos
注意:1、2可以合并为
$ gcc -fpic -shared shellofirst.c shellosecond.c -o hello.so
_____________________________________
Overriding the Naming Convention
$ gcc -xc helloworld.jxj -o helloworld
-xc对于C语言的源代码,默认后缀为.c,但别的后缀文件也可以当作c来用,那就要加-x选项
_______________________________________
Create a header file
$ gcc sayhello.c -aux-info sayhello.h
$ gcc *.c -aux-info prototypes.h
不过这样产生的头文件,包含的函数原型太多,除了用户自定义的函数外,标准库中的函数原型都列出来了


本篇文章为转载内容。原文链接:https://blog.csdn.net/szu030606/article/details/7212586。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

相关阅读
文章标题:[转载][洛谷P1082]同余方程

更新时间:2023-02-18
[转载][洛谷P1082]同余方程
文章标题:[转载]webpack优化之HappyPack实战

更新时间:2023-08-07
[转载]webpack优化之HappyPack实战
文章标题:[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法

更新时间:2023-09-10
[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法
文章标题:[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo

更新时间:2024-03-11
[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo
文章标题:[转载]程序员也分三六九等?等级差异,一个看不起一个!

更新时间:2024-05-10
[转载]程序员也分三六九等?等级差异,一个看不起一个!
文章标题:[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集

更新时间:2024-01-12
[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集
名词解释
作为当前文章的名词解释,仅对当前文章有效。
PIC (Position Independent Code)在计算机程序编译领域,PIC是指位置无关代码,即代码能够在内存中的任何位置正确执行。在生成共享库时,为了使库可以在不同进程间共享,并且加载地址不确定,需要将代码编译为PIC形式。这意味着代码不会包含绝对地址引用,而是使用相对地址或全局偏移表(GOT)等机制来访问数据和函数。
静态库 (.a 文件)静态库是链接时复制到最终可执行文件中的一组编译后的目标文件(.o 文件)。在C语言开发中,静态库通常以`.a`作为扩展名,当程序链接时,静态库中的所有相关代码都会被提取并整合进可执行文件,使得程序在运行时无需依赖外部文件。
共享库 (.so 文件)共享库(动态库)是一种存储在磁盘上的独立文件,在运行时可以被多个进程动态加载并链接。在Linux系统中,共享库的扩展名为`.so`,如`libhello.so`。与静态库不同,程序在运行时只需载入共享库的部分内容,而非全部复制到可执行文件中,从而节省了存储空间和提高了资源利用率。同时,更新共享库文件可以立即影响到所有依赖它的应用程序,无需重新编译这些程序。
预处理 (-E 参数)在C/C++编程语言中,预处理是一个编译过程的阶段,它发生在实际编译之前。通过GCC命令行添加 `-E` 参数,编译器会执行宏展开、条件编译指令处理、头文件包含等操作,但不进行编译和链接,而是输出预处理后的源代码到一个文件(默认不输出或指定为`.i`后缀文件)。这有助于开发者查看经过宏替换及包含头文件后的真实源代码状态。
-aux-info 参数在GCC编译器中,`-aux-info` 参数用于从源代码生成包含函数原型信息的头文件。例如,`gcc sayhello.c -aux-info sayhello.h` 将从 `sayhello.c` 源文件中提取函数声明并将其写入 `sayhello.h` 文件。虽然此选项可以方便地创建头文件,但需要注意的是,生成的头文件可能包含了来自标准库和其他未过滤的函数原型,因此在实际项目中可能需要进一步筛选和整理。
延伸阅读
作为当前文章的延伸阅读,仅对当前文章有效。
在深入理解GCC编译器的各种选项及C语言项目的构建流程后,进一步学习和探索将大有裨益。近期,GCC社区发布了最新版本12.0,带来了更多优化与改进,包括对C23标准特性的初步支持、性能提升以及错误检测能力的增强(参见“GCC 12.0 Release Notes”)。此外,对于软件开发者而言,理解如何有效地利用Clang等其他现代编译器进行交叉编译和代码优化也是必备技能。
在实际开发中,使用GCC编译大型项目时,自动化构建工具如CMake和Autotools的作用不容忽视。它们能够简化多平台下的编译流程,并有效管理静态库与共享库的生成与链接(参考“Mastering CMake for Effective Project Configuration and Build System”)。
针对预处理和头文件管理,LLVM的Header Include Optimization (HIO) 技术提供了一种新的解决方案,它能够在编译时智能地分析和包含必要的头文件,从而提高编译速度和减少冗余(查阅“LLVM’s Header Include Optimization: Smarter Inclusion of Headers”)。
同时,对于希望深入了解底层机制的开发者,可以阅读《深入理解计算机系统》一书,书中详细介绍了从源码到可执行程序的完整过程,涵盖了预处理、编译、汇编和链接等各阶段原理,有助于读者更好地运用GCC编译选项和相关技术。
总之,在掌握GCC基本用法的基础上,结合最新的编译器技术和构建工具发展动态,以及深入研究编译原理,都能帮助开发者更高效地构建高质量的C语言项目。
知识学习
实践的时候请根据实际情况谨慎操作。
随机学习一条linux命令:
pkill pattern - 结束符合模式的进程。
随便看看
拉到页底了吧,随便看看还有哪些文章你可能感兴趣。
Netty中的并发资源分配:线程池与即时通讯应用高负载性能瓶颈应对 12-05 数据分批读取:优化Memcached服务器压力与提升用户体验 10-25 jQuery网格图片切换效果 09-24 可拖拽文件的jQuery文件上传控件美化插件 07-29 Redis中数据类型与命令匹配:正确应对`命令不支持当前状态`错误及WATCH命令影响实践 03-12 [转载]2017浙江工业大学-校赛决赛 竹之书 01-04 宽屏产品展示企业网站模板下载 01-01 docker数据路径(docker image存储路径) 10-29 [转载]容器实践线路图 09-17 本次刷新还10个文章未展示,点击 更多查看。
RabbitMQ中消息丢失问题的防范:持久化存储、自动确认与死信队列的应用实践 09-12 视差大气应用程序和功能开发企业网站模板 08-12 Tomcat环境下防范网站安全问题:针对XSS攻击的防御措施与HTTP-only cookie实践 08-10 js和CSS3鼠标hover菜单文字特效 07-22 json 数组大小 05-08 蓝色经典在线课程教育培训网站模板 05-05 jQuery和CSS3全屏展开纸张样式导航菜单特效 03-28 红色精美发型彩妆造型培训学校网站模板 03-27 [转载]java爬虫爬取京东_java爬虫练习|爬取京东上的手机商品数据 03-13 废旧电器回收类企业前端cms模板下载 02-05 [转载]Internal类 02-02
时光飞逝
"流光容易把人抛,红了樱桃,绿了芭蕉。"