当前位置:首页 » 编程软件 » 静态编译和动态编译的区别

静态编译和动态编译的区别

发布时间: 2022-01-25 06:43:51

Ⅰ 什么是静态编译,什么是动态编译,以及他们的区别

后者容易扩充,前者运行效率高,但一旦有更新,要全部重新编译

Ⅱ 在linux系统中,静态编译和动态编译哪个速度快的

你说的静态库和动态库吧?编译速度没有太大的区别,在实际运行时,静态库运行较快,而动态库内地函数由于在实际使用到时才加载到内存,所以运行较慢。动态库的好处是只要保持接口不变,就可以在程序运行时进行动态库的切换。

Ⅲ 请哪位来解释一下Qt静态编译和动态编译的区别

静态编译与动态编译的区别:
1、动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令。
所以其优点一方面是缩小了执行文件本身的体积,另一方面是加快了编译速度,节省了系统资源。
缺点一是哪怕是很简单的程序,只用到了链接库中的一两条命令,也需要附带一个相对庞大的链接库;二是如果其他计算机上没有安装对应的运行库,则用动态编译的可执行文件就不能运行。

Ⅳ 静态编译和动态编译有何不同

静态编译就是把库函数编译到你的程序里 这样编译的好处是 可以适应不同的平台 如果你是用window系统的话不建议用静态编译 因为这样会使你的代码量增大
动态编译就是不把库函数编译到你的程序里

Ⅳ 配置Linux内核的时候,驱动的静态编译和动态编译有什么区别

驱动的动态编译会生成.ko文件,系统启动后需要加载该驱动后才能使用相应设备。
而静态编译则直接编译进内核,系统启动的时候会自动加载该驱动。
静态编译太多驱动至内核,会导致内核体积过大,启动时间较长。而动态编译则比较自由灵活,需要用的时候即加载,不需要的时候即卸载。我以前在EasyARM-iMX280的学习手册里看到写得很清楚,你可以去看看的。

Ⅵ linux 静态库和动态库编译的区别

Linux库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。例如:libhello.so libhello.a
为了在同一系统中使用不同版本的库,可以在库文件名后加上版本号为后缀,例如: libhello.so.1.0,由于程序连接默认以.so为文件后缀名。所以为了使用这些库,通常使用建立符号连接的方式。
ln -s libhello.so.1.0 libhello.so.1
ln -s libhello.so.1 libhello.so

动态库和静态库的区别:
当要使用静态的程序库时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功,静态程序库也就不再需要了。然而,对动态库而言,就不是这样。动态库会在执行程序内留下一个标记‘指明当程序执行时,首先必须载入这个库。由于动态库节省空间,linux下进行连接的缺省操作是首先连接动态库,也就是说,如果同时存在静态和动态库,不特别指定的话,将与动态库相连接。

两种库的编译产生方法:
第一步要把源代码编绎成目标代码。以下面的代码hello.c为例,生成hello库:

/* hello.c */
#include
void sayhello()
{
printf("hello,world\n");
}
用gcc编绎该文件,在编绎时可以使用任何全法的编绎参数,例如-g加入调试代码等:
gcc -c hello.c -o hello.o
1.连接成静态库
连接成静态库使用ar命令,其实ar是archive的意思
$ar cqs libhello.a hello.o
2.连接成动态库
生成动态库用gcc来完成,由于可能存在多个版本,因此通常指定版本号:
$gcc -shared -Wl,-soname,libhello.so.1 -o libhello.so.1.0 hello.o
另外再建立两个符号连接:
$ln -s libhello.so.1.0 libhello.so.1
$ln -s libhello.so.1 libhello.so
这样一个libhello的动态连接库就生成了。最重要的是传gcc -shared 参数使其生成是动态库而不是普通执行程序。
-Wl 表示后面的参数也就是-soname,libhello.so.1直接传给连接器ld进行处理。实际上,每一个库都有一个soname,当连接器发现它正在查找的程序库中有这样一个名称,连接器便会将soname嵌入连结中的二进制文件内,而不是它正在运行的实际文件名,在程序执行期间,程序会查找拥有 soname名字的文件,%B

Ⅶ 易语言编译和静态编译的区别

1、库文件和程序文件不同,编译是把支持库文件和程序分开来,如果给别人去用,别人却没安装易语言,就要把支持库文件带上给那人才能用。但是静态编译是把支持库文件打包到程序里去.这样,如果对方没装易语言也照样可以正常使用和独立编译。

Ⅷ Java代码的静态编译和动态编译中的问题是什么

Java代码正常是静态编译成字节码,由对应平台的JVM加载执行,静态编译无法动态扩展功能。动态编译有两种方式实现:

  1. 源码编译,需要调用Java Compiler,程序需要运行于JDK(而不是JRE)之上。

  2. 动态字节码生成技术(如CGLib、ASM)创建类。

动态编译可以简化代码,增强类功能,但也带来了代码复杂度,线上不易维护。

Ⅸ 易语言编译与静态编译的区别。求解释!

静态编译就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库。而编译就是把可执行文件和支持库一起写出到外部,在需要的时候直接对其中一个支持库进行搜索某一条命令.
打个比方.
你家有6个罐子,里面分别放了1块,5块,10块,20块,50块,100块.
然后你出门的时候要带每一种钱各一个,所以就从这六个罐子里每个罐子都拿出一张钱.
这就是静态编译.
我再打个比方.
你家还是有6个罐子,里面分别放了1块,5块,10块,20块,50块,100块.
然后你出门的时候,还是想要都带一种,然后你就不是每个罐子里拿钱了,而是直接把整个罐子都带在了身上出门.
相比起来,静态编译要轻松,小巧了许多了.

Ⅹ 动态链接,静态链接 动态编译,静态编译 动态链接库,静态链接库 这些两两间的区别是什么呢

有点儿乱……,分数少简单扼要的说说吧。
————————————
首先,传统的编译,也就是静态编译是把 源文件 翻译成目标文件,这个是一次性过程,也就是你所谓的静态编译。
后来的Java和.NET等语言,首先编译成中间形式,然后运行过程中根据需要编译成本地代码(注意这个过程不是一次性的,下次运行重新编译),这个就是JIT(即时编译)技术,从即时编译发展出了动态编译技术
————————————
(传统的)编译完成后,像C/C++、Fortran、汇编等语言,可以把多个目标文件合并到一个库文件中,这个就是静态库。比如常说的库函数printf就是libc里面的函数。
如果有了启动函数(main),main里面使用了printf,就可以通过静态链接技术,从libc中提取出printf所在的文件加入到可执行文件中,如果printf还需要其它函数,就继续搜索并加入列表,直到形成一个闭包。这个就是静态链接。
可是静态链接有个明显的缺点,如果每个程序都需要printf,那么printf这个函数的代码就会同时存在在每个程序中,这样也太占地方了吧。所以发明了动态连接技术,其实有两种形式。无论哪一种,都是首先记录下需要调用printf这个函数以及所在的动态库,等到运行的时候再加载动态库,从动态库中找到真正的printf去执行。
由于,动态链接技术需要一些额外的信息,传统的静态库是不具备的,这些额外信息主要是重复加载和卸载时所需要的一些代码,因此需要动态链接库。

热点内容
欧美版思域是什么版本配置 发布:2024-12-27 11:20:45 浏览:250
具医院的wifi密码是什么 发布:2024-12-27 11:20:07 浏览:76
dll服务器如何重启 发布:2024-12-27 11:19:58 浏览:952
安卓怎么把视频变成模糊 发布:2024-12-27 11:18:37 浏览:961
oracle分页sql怎么写 发布:2024-12-27 11:02:02 浏览:845
服务器如何远程集中管理 发布:2024-12-27 11:00:26 浏览:889
android解锁代码 发布:2024-12-27 10:58:25 浏览:739
linuxusb摄像头的驱动 发布:2024-12-27 10:58:13 浏览:5
斗罗电脑版服务器 发布:2024-12-27 10:57:26 浏览:32
linux添加日志服务器地址 发布:2024-12-27 10:52:35 浏览:563