|
发表于 2006-8-13 19:46:10
|
显示全部楼层
Post by sumargin
用delphi编译而成的exe文件,必然用到vcl类库,而把这个exe文件拿到没有delphi,也没vcl库的电脑,却也能执行。是不是exe文件会把library等编译会用到的东西全部包含进来?
是的,这就是所谓“静态链接”。
一般来说,链接过程发生在编译完成后,链接器通过符号解析和代码重定位等一系列措施确定你的程序需要的目标代码(包括你自己写的,还有库里面的),然后根据用户的要求进行链接,比如静态方式。静态链接会把库中用到的代码全部拷贝到最终的可执行目标文件里头,但不是库中的所有内容,而是要什么代码就拷贝什么代码,“按需分配”。如果你写的程序调用了很多库,使用了很多库函数,最后静态链接出来的目标代码就会比较庞大; 但拿到任何同类架构、同类OS的机器上就可以跑。
Post by sumargin
如果是这样的话,我写的程序有20多mb,为何compiler后只有几mb,甚至几百kb而已?
如果采用动态方式链接,那么并不会把库里头的东西拷贝到可执行目标文件; 模块间的链接是在加载、运行时由动态链接器自动完成,甚至在运行时由应用程序调用动态链接器来完成。这样生成的代码尺寸当然小,不过拿到没有特定库的机器上就跑不了。 |
|