传统编译是静态编译吗
① 如何编译C/Fortran动态/静态链接库
首先,传统的编译,也就是
静态编译
是把
源文件
翻译成目标文件,这个是一次性过程,也就是你所谓的静态编译。
后来的Java和.NET等语言,首先编译成中间形式,然后运行过程中根据需要编译成本地代码(注意这个过程不是一次性的,下次运行重新编译),这个就是JIT(即时编译)技术,从即时编译发展出了动态编译技术
————————————
(传统的)编译完成后,像C/C++、Fortran、汇编等语言,可以把多个目标文件合并到一个
库文件
中,这个就是静态库。比如常说的
库函数
printf就是libc里面的函数。
如果有了启动函数(main),main里面使用了printf,就可以通过
静态链接
技术,从libc中提取出printf所在的文件加入到可执行文件中,如果printf还需要其它函数,就继续搜索并加入列表,直到形成一个
闭包
。这个就是静态链接。
可是静态链接有个明显的缺点,如果每个程序都需要printf,那么printf这个函数的代码就会同时存在在每个程序中,这样也太占地方了吧。所以发明了动态连接技术,其实有两种形式。无论哪一种,都是首先记录下需要调用printf这个函数以及所在的
动态库
,等到运行的时候再加载动态库,从动态库中找到真正的printf去执行。
由于,
动态链接
技术需要一些额外的信息,传统的静态库是不具备的,这些额外信息主要是重复加载和卸载时所需要的一些代码,因此需要
动态链接库
。
② 静态编译和动态编译有何不同
静态编译就是把库函数编译到你的程序里 这样编译的好处是 可以适应不同的平台 如果你是用window系统的话不建议用静态编译 因为这样会使你的代码量增大
动态编译就是不把库函数编译到你的程序里
③ 易语言静态编译和独立编译的区别
静态编译指的是编译的软件包含易语言运行环境,可以在任意正常windows、Linux运行,普通的编译则需要在安装了易语言的电脑上运行,没有易语言运行环境打开就会报错。,
④ 在易语言里,什么叫做静态编译,什么叫做动态编译那可以生成安装包的是什么编译具体见补充
静态编译.就是单独形成一个EXE执行文件..这个文件可以直接发送给别人用.
动态编译.会在EXE执行文件生成后.另多一个文件..这个文件是这个执行文件的支招库文件..必须和EXE执行文件在同一文件夹时..才能执行EXE文件
⑤ Java代码的静态编译和动态编译中的问题是什么
Java代码正常是静态编译成字节码,由对应平台的JVM加载执行,静态编译无法动态扩展功能。动态编译有两种方式实现:
从源码编译,需要调用Java Compiler,程序需要运行于JDK(而不是JRE)之上。
动态字节码生成技术(如CGLib、ASM)创建类。
动态编译可以简化代码,增强类功能,但也带来了代码复杂度,线上不易维护。
⑥ 易语言的静态编译和独立编译的区别
以前易语言只有独立编译,封装一个空程序都有600多kb,而且兼容性差,部分电脑运行不了,杀毒软件报毒也厉害。
后来出了静态编译,体积没那么大了,兼容性好像也很好,报毒的概率也低了,区别应该就在这吧。
⑦ 易语言中的编译和静态编译有何区别
静态编译就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库。而编译就是把可执行文件和支持库一起写出到外部,在需要的时候直接对其中一个支持库进行搜索某一条命令.
打个比方.
你家有6个罐子,里面分别放了1块,5块,10块,20块,50块,100块.
然后你出门的时候要带每一种钱各一个,所以就从这六个罐子里每个罐子都拿出一张钱.
这就是静态编译.
我再打个比方.
你家还是有6个罐子,里面分别放了1块,5块,10块,20块,50块,100块.
然后你出门的时候,还是想要都带一种,然后你就不是每个罐子里拿钱了,而是直接把整个罐子都带在了身上出门.
相比起来,静态编译要轻松,小巧了许多了.
lz 手打很累的 采纳吧