1.链接是什么?
我们的程序,和 库(语言一定会有自己的标准库) 结合的过程就叫做链接。
2.为什么有链接?
让开发站在巨人的肩膀,提高开发效率。
c语言库:
ls /user/include/
动静态库的特点与区别:
静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为“.a”
动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”,如前面所述的 libc.so.6 就是动态库。gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件,如下所示。 gcc test.o –o test.c
gcc默认生成的二进制程序,是动态链接的,这点可以通过 file 命令验证
Linux:
动态库: .so
静态库: .a
Windows:
动态库:.dll
静态库: .lib
共享动态库:一旦动态库缺失,程序中所有动态链接的程序,都无法执行
静态链接的应用场景:
在编译的时候,把库中的方法,拷贝到我自己的可执行程序中,不用在关心库的缺失。所以注定静态链接形成的可执行程序不依赖任何库,因此当所编译程序 centos 8 ...具有非常强的跨平台性,可静态链接,在各种平台都可以跑。
静态库的安装:(默认情况下,linux上,静态库是默认没有安装的)
这个命令是在Linux系统中使用yum包管理器安装静态版本的glibc和libstdc++库。-y
标志表示自动回答"是"以接受所有的问题。
sudo yum install -y glibc-static libstdc++-static
文件大小的区别
当我们制作可执行的文件(你可以随便使用一个正确的c语言代码来测试):
静态:
gcc test.c -o mytest-static -static
动态:
gcc test.c -o mytest
最后我们可以明显观察到两者文件大小的区别