linux下c语言工程:

c文件:主要每个模块的原代码都在c文件中。

h文件:每个c文件都跟着一个h文件,h文件的作用是放着c文件中函数的声明,结构体的定义,宏的定义等。

o文件:目标文件。每个文件经过编译都会形成一个目标文件(二进制文件),多个目标文件链接后才能形成可执行文件。

o文件如何形成: gcc -c a.c

可执行文件:

不论是c文件还是o文件,都是无法执行的,最终还要生成可执行的文件。

gcc  a.c b.c c.c -o run  将c文件编译后链接,生成可执行文件

gcc a.o b.o c.o -o run   将目标文件链接为可执行文件

a文件:将o文件打包生成的静态库。

so文件:形成动态库,当程序运行的时候才加载进来。

生成so文件:gcc a.c b.c c.c -fpic  -shared -o  librun.so

.o文件
.o文件是源码编译出的二进制文件。
你先得了解从源代码到可执行文件的过程。以一个简单的add函数源文件为例。

int add(int a,int b)
{
return a+b;
}

先预处理为.i文件
gcc -E add.c -o add.i
再编译为汇编文件
gcc -S add.i -o add.s
再汇编为二进制的.o文件
gcc -c add.s -o add.o

好,现在.o文件出来了。它就是C/C++编译的产物,因为C/C++编译的单元编译。每一个.c/.cpp文件就是一个编译单元,把所有单元都编译好之后,再连接成一个完成的程序。

.a文件
.a文件实质上就是.o文件打了个包。一般把它叫做静态库文件。它在使用的时候,效果和使用.o文件是一样的。

.so文件
.so文件就不一样了,它不是简单的.o文件打了一个包,它是一个ELF格式的文件,也就是linux的可执行文件。
.so文件可以用于多个进程的共享使用(位置无关的才行),所以又叫共享库文件。程序在使用它的时候,会在运行时把它映射到自己进程空间的某一处,其不在使用它的程序中。
————————————————
版权声明:本文为CSDN博主「wbx9011」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/a879365197/article/details/72933916

最新文章

  1. iOS中assign,copy,retain之间的区别以及weak和strong的区别
  2. adt_sdk_tools介绍
  3. 使用JDBC获取Oracle连接时报错
  4. 学习笔记-----Android的View绘制过程
  5. JVM探索之——内存管理(二)
  6. MongoDB的学习和使用(固定集合[Capped Collections])
  7. Oracle笔记 十二、PL/SQL 面向对象oop编程
  8. My集合框架第一弹 LinkedList篇
  9. iOS 精确定时器
  10. 【转】web测试内容及工具经典总结
  11. Moduli number system
  12. Delphi-Delete 过程
  13. css3中动画animation的应用
  14. yw info
  15. MarkdownPad2代码高亮插件兼容移动端样式
  16. day24_python_1124
  17. sugarCRM文档翻译1
  18. 一行代码搞定 R 语言模型输出!(使用 stargazer 包)
  19. .NetCore 使用Zipkin 分布式服务追踪监控服务性能
  20. 肿瘤基因组学数据库终结者:cBioPortal---转载

热门文章

  1. spring cloud:HystrixDashboard
  2. ES6 函数参数的解构赋值
  3. SQL server 安装教程
  4. java第二周小结
  5. Oracle JET mobile cordove navigator.app对象
  6. input绑定事件
  7. final finalize finally throw throws try catch
  8. webpack安装低于4版本(没有配置webpack.config.js)
  9. QBXT Day 5图论相关
  10. C# WinForm开发系列学习 地址 很详细