cmake制作动态库和静态库
linux动态库--so
windows动态库--dll
linux静态库--a
windows静态库--lib
add_library(库名 STATIC|SHARED 源文件......)
动态库有可执行权限
静态库没有可执行权限
add_library(库名,STATIC|SHARED)
没有利用的源文件,表示只需要建立这个库文件。
没有指定库的类型默认生成静态库。
库的使用
需要库和头文件
要形成良好的编程习惯,静态库和动态库不要放在一个目录下,否则如果静态库和动态库同名,引用库会出现问题。
指定库的生产路径
因为动态库具有可执行权限,动态库可以用两个系统变量指定生成的路径:
EXECUTABLE_OUTPUT_PATH,LIBRARY_OUT_PATH;
静态库只能用后面一个。
静态库的生成
库的生成至少需要指定两个东西:
1,头文件路径(因为源文件中包含头文件了);
2,源文件;
如果不指定生成的类型,默认生成静态库。
动态库的生成
和静态库一样,只需要改变生成的类型关键字就行。
怎么使用库文件
源文件是文本格式,库文件是二进制格式。
使用静态库
link_librairys()
一个类型的参数,可以有多个参数
库文件中含有源文件定义的内容,生成可执行文件我们需要指定的有两个文件:
1,头文件路径(如果在当前目录不需要指定);
2,库文件(及其路径);
系统提供的库只需要提供库名;
自定义的库还需要指定路径;
指定库的路径
link_directories()
注意:这个函数只是用来指定静态库和动态库路径的,不指定库。
多个库就指定多个路径。
使用动态库
target_link_librairies()
两个类型的参数
动态库加载的位置
动态库的链接应该写生成可执行文件之后,因为只有可执行程序调用动态库,动态库才会被加载到内存,而不是想静态库一样生成可执行程序的过程就需要加载静态库一起打包。
target_link_library多次加载动态库需统一链接权限风格问
动态库的访问权限
默认情况下,库的链接是具有传递性的。
public 默认;
private 会断层,只能单层继承;
interface 跨越库使用
使用静态库和动态库的区别
静态库文件会放入可执行程序文件,执行前链接静态库文件;
动态库不会 ,执行时需要才去加载和链接动态库;
库的建立到使用
建立---链接
什么东西需要生成库文件
源文件
生成库文件之后怎么用
头文件,库文件。