重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
静态链接相当于你把静态库也加到二进制文件里面去了。动态的话,只是指明了需要什么动态库,这个库在什么位置。你换一台机器的话,编译静态库的二进制文件是可以执行的。动态库的二进制文件则需要对应目录有需要的动态库才可以执行。多个程序都编译同一个静态库,那么多个二进制文件执行时都需要加载静态库这部分代码。如果是动态库,那么多个二进制文件只需要在内存里面有一份这个动态库部分的代码。
创新互联公司始终坚持【策划先行,效果至上】的经营理念,通过多达10余年累计超上千家客户的网站建设总结了一套系统有效的营销解决方案,现已广泛运用于各行各业的客户,其中包括:成都格栅板等企业,备受客户称扬。
之所以成为【静态库】,是因为在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中。因此对应的链接方式称为静态链接。
试想一下,静态库与汇编生成的目标文件一起链接为可执行文件,那么静态库必定跟.o文件格式相似。其实一个静态库可以简单看成是一组目标文件(.o/.obj文件)的集合,即很多目标文件经过压缩打包后形成的一个文件。静态库特点总结:
为什么需要动态库,其实也是静态库的特点导致。
动态库特点总结:
生成动态库
gcc -c jinpeng.c 生成jinpeng.o文件,该步是编译过程,将jinpeng.c编译成二进制码
ar cr jinpeng.a jinpeng.o 生成库文件
gcc -o test test.c ./jinpeng.a 静态链接,将库的内容加入到输出文件中。
头文件不需要编译,直接加入就好,头文件都是一些声明,库文件是具体实现。
首先c++的库一定要有c的符号, 也就是extern c定义的函数, 然后链接库,再调用这个函数即可。
如果没有这个extern c,那就别想了,c++的运行机制和c不一样,c++还存在少量的运行时,c完全不能处理