obj lib

作者:家庭科技谱
链接:https://www.zhihu.com/question/20783462/answer/141924734
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

各路大神回答的都很清楚了,我也说下我的理解,描述上不一定严谨,只是阐述一下意思:1. 先说下编译。假设你已经写好了一大堆的.c文件和.h文件,下面开始编译了,此时跟连接、.lib文件、.dll文件还有.o文件没关系,但是跟.h文件和.c文件有关系,因为要把它们编译成机器自己认识的代码,也就是机器代码。2. 再说说.o文件。编译完了后,上述一大堆的.c和.h文件会被编译为.o文件,此时跟编译、.h文件和.lib文件、.dll文件也没什么关系了。.o文件一般就是机器代码了,但是别以为此时就能执行这个文件了。上述.c文件里你肯定会调用好多的C标准库函数,被编译后,.o机器代码里可没有这些库函数的代码,所以还要把这些库函数的代码拉过来,这就是链接干的事儿了;3. 再说说链接。链接器会把编译器编译好的.o文件,以及.o文件中调用的库函数代码“合”到一起。在linux系统上,这些库函数代码就在.lib中,在windows系统上,这些库函数代码就在.dll中。4. 经过上述步骤后,你写的源代码最终就变成一个可执行程序了,在windows上就是exe文件,在linux上就是.out文件了。5. 所以,要搞清你说的这些术语之间的关系,可以用两个简单的线来描述,即:你写好的.c和.h源代码——>编译——>编译为.o文件;.o文件+lib文件或者.o文件+.dll文件——>连接器——>“合”在一起,变成一个可执行程序,如exe文件或者.out文件。

发布了56 篇原创文章 · 获赞 12 · 访问量 7849

猜你喜欢

转载自blog.csdn.net/weixin_44884357/article/details/105437319
lib