文章目录
- 库
- gcc/g++
- 程序编译过程
- 链接
- 动态链接
- 静态链接
- make _ makefile
库
一、 什么是库?
库是程序代码的集合,是共享程序代码的一种方式。根据源代码的公开情况,库可以分为两种类型:
-
开源库,公开源代码,能看到具体实现,比如:SDWebImage、AFNetworking。
-
闭源库,不公开源代码,是经过编译后的二进制文件,看不到具体实现。闭源库主要分为:静态库和动态库。
二、静态库和动态库的存在形式
linux下的后缀
-
静态库: .a
-
动态库: .so
window下的后缀 -
静态库: .lib
-
动态库: .dll
三、静态库和动态库在使用上的区别
静态库:链接时,静态库会被完整的复制到可执行文件中,被多次使用就有多分冗余拷贝。
动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序公用,节省内存。
————————————————
原文链接:https://blog.csdn.net/sinat_27706697/article/details/48946677
gcc/g++
gcc和g++是C/C++的编译器
它们都可以编译C/C++,gcc 后面需要跟一个选项gcc xxx.cpp -lstdc++,因为gcc自动和C库链接,不能自动链接C++库,g++编译自动链接C++库。
gcc和g++默认形成的可执行程序,默认采用动态链接
程序编译过程
编译过程:
链接
简单来说就是程序和库的结合过程
链接分为动态链接和静态链接
动态链接
动态链接:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序公用,节省内存。
优缺点:不可丢失 资源节省
静态链接
静态链接:链接时,静态库会被完整的复制到可执行文件中,被多次使用就有多分冗余拷贝。
优缺点:一旦形成,与库无关 资源浪费
make _ makefile
make是命令 要跟makefile文件依赖使用
下图是makefile的内容。
make使用的时候会从上到下搜索makefile文件的内容,根据文件内容的依赖关系下的依赖方法做出工作。
依赖方法前面必须要有一个tab键
直接使用make命令,会执行第一个依赖关系下的依赖方法。
再次使用make命令出现下列情况,因为提高编译效率,这样的行为就会被制止,除非源代码被修改。
make命令编译程序怎么知道它是最新的可执行程序的,通过对比,可执行文件和源文件最近的修改时间即可知道,源文件比对应可执行程序修改时间新证明源文件被修改,否则可执行程序是新的。
通过stat xxxx文件 可以看到文件的acm时间。
Access时间表示最后一次访问文件的时间,Modify时间表示文件内容最后一次被修改的时间,Change时间表示文件属性最后一次被修改的时间。 通过使用指令 stat 文件名 可以查看这些时间
touch xxx文件 可以更改文件的修改时间。
.PHYON: XXX
XXX对应的方法总是被执行。