静态链接和动态链接区别

 1.静态链接与动链接的区别

        在C语言中,我们知道要生成可执行文件,必须经历两个阶段,即编译、链接。

        在编译过程中,只有编译,不会涉及到链接。

           在链接过程中,静态链接和动态链接就出现了区别。静态链接的过程就已经把要链接的内容已经链接到了生成的可执行文件中,就算你在去把静态库删除也不会影响可执行程序的执行;而动态链接这个过程却没有把内容链接进去,而是在执行的过程中,再去找要链接的内容,生成的可执行文件中并没有要链接的内容,所以当你删除动态库时,可执行程序就不能运行。

           所以总的来说,动态链接生成的可执行文件要比静态链接生成的文件要小一些。

2.动态库与静态库的区别

        2.1就不设置环境变量的情况下来说

        动态库一般都会存在/usr/lib/ 目录下;而静态库可以在任何目录下,只要你第一次链接的时候,用绝对路径去链接就行了,之后再删除,是不会影响你的生成的执行文件的。

            2.2如若可以设置环境变量的话

            动态库和静态库可以放置到你想放的任何地方,只是动态库需要设置环境变量,而静态库链接的时候需要绝对路径。

            但一般来说,动态库都会放在放在/usr/lib,应该大家都习惯了,这样也方便寻找,而当链接动态库的时候默认的路径就是/usr/lib。

各自的优缺点:

1、静态链接库执行速度比动态链接库快。(执行过程不需要找链接的内容)

2、动态链接库更节省内存。(未写入要链接的内容)

  • 15
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GCC是一个用于编译C和C++语言程序的开源编译器工具。gcc可以执行静态链接动态链接静态链接动态链接有什么区别静态链接 静态链接是指将所有代码、库文件和其他依赖项编译成一个可执行文件。所有的代码和库文件都被放置在可执行文件中,这意味着在程序运行时,所有的函数和代码都在可执行文件中被加载到计算机内存中。 由于所有的代码都在可执行文件中,这样的文件会比较大。另外,当一个静态链接库发生改变时,需要重新编译可执行文件。 动态链接 动态链接是指在程序运行时才加载库文件和其他依赖项,与静态链接形成的大文件不同,动态链接需要的函数和库文件在运行时从系统中加载,不过在编译器链接阶段需要包含引用库函数的信息。 当程序运行时,代码会加载到系统内存中,这时才会加载动态链接库和其他依赖项。 这种方式节约了内存空间,可以在程序运行时动态更新库。当一个动态链接库发生改变时,只需要替换文件即可,不需要重新编译可执行文件。 总结 静态链接是将所有代码和库文件编译成一个可执行文件,所有的函数和代码都在被加载到计算机内存中之前就被放置在可执行文件中。动态链接允许将库文件和其他依赖项在程序运行时加载到内存中,允许动态更新库文件。 两种链接方式都有优缺点。静态链接会使得文件变大,但是不需要依赖外部库文件。动态链接则会使得程序依赖外部库文件,但是可以让程序更加灵活地使用外部库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值