
问题1:
BD
D:通过目标文件归档程序(VC++中是libexe)和其它方式(例如由dll文件生成lib文件)得到的产物 。
问题2:
AB
问题3:
不一定。首先,一个完整的程序的全编译过程可以仅依赖于现有的库文件,且不在这个程序的编译过程生成库文件。其次,库文件的格式不一定是lib和dll文件。至于手动生成lib和dll,这个和使用的工具相关。例如VC++的命令行可以用编译程序clexe编译源文件为目标文件,用归档程序libexe连接obj和lib文件生成静态库,用链接程序linkexe链接目标文件和资源文件生成exe和dll。
====
一、指代不同
1、动态链接库:是微软公司在微软Windows *** 作系统中,实现共享函数库概念的一种方式。
2、静态链接库:函数和数据被编译进一个二进制文件(通常扩展名为LIB),Visual C++的编译器在链接过程中将从静态库中恢复这些函数和数据并把他们和应用程序中的其他模块组合在一起生成可执行文件。
二、特点不同
1、动态链接库:库函数的扩展名是 ”dll"、"ocx"(包含ActiveX控制的库)或者 "drv"(旧式的系统驱动程序)。
2、静态链接库:使用的lib文件,库中的代码最后需要连接到可执行文件中去。
三、调用方法不同
1、动态链接库:提供了一种使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 文件中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。
2、静态链接库:用程序所需的全部内容都是从库中复制了出来,所以静态库本身并不需要与可执行文件一起发行。
参考资料来源:百度百科-静态链接库
参考资料来源:百度百科-动态链接库
您想问的是eps数据狗论坛的帖子链接为静态链接吗。不是静态链接。
静态链接是在链接时将库的内容加入,eps数据狗论坛的帖子不是数据库中的内容,帖子链接不是静态链接。
静态链接是由链接器在链接时将库的内容加入到可执行程序中的做法,链接器是一个独立程序,将一个或多个库或目标文件链接到一块生成可执行程序。
有点儿乱……,分数少简单扼要的说说吧。
————————————
首先,传统的编译,也就是静态编译是把 源文件 翻译成目标文件,这个是一次性过程,也就是你所谓的静态编译。
后来的Java和NET等语言,首先编译成中间形式,然后运行过程中根据需要编译成本地代码(注意这个过程不是一次性的,下次运行重新编译),这个就是JIT(即时编译)技术,从即时编译发展出了动态编译技术
————————————
(传统的)编译完成后,像C/C++、Fortran、汇编等语言,可以把多个目标文件合并到一个库文件中,这个就是静态库。比如常说的库函数printf就是libc里面的函数。
如果有了启动函数(main),main里面使用了printf,就可以通过静态链接技术,从libc中提取出printf所在的文件加入到可执行文件中,如果printf还需要其它函数,就继续搜索并加入列表,直到形成一个闭包。这个就是静态链接。
可是静态链接有个明显的缺点,如果每个程序都需要printf,那么printf这个函数的代码就会同时存在在每个程序中,这样也太占地方了吧。所以发明了动态连接技术,其实有两种形式。无论哪一种,都是首先记录下需要调用printf这个函数以及所在的动态库,等到运行的时候再加载动态库,从动态库中找到真正的printf去执行。
由于,动态链接技术需要一些额外的信息,传统的静态库是不具备的,这些额外信息主要是重复加载和卸载时所需要的一些代码,因此需要动态链接库。
你可能把隐式的动态链接理解为静态链接了: 隐式链接是指在代码中使用了了库中的代码,只是在链接时,链接器会把该库的符号信息以及导入函数的信息写入到生成的Exe文件的特定的区段中。当该程序加载时, *** 作系统会根据这个区段中的信息,来查找每个它需要的动态库,并根据这些动态库的导出表,与程序中的导入表相配对,以确定程序中使用的动态库中的代码在什么位置。这样应用程序就能够正确是链接到动态库中的代码了。如果在这个过程中,发生了错误,比如没有找到要求的库文件,或者库中没有你要使用的函数,程序的初始化就会失败, *** 作系统就会报错,并终止该程序的初始化,你的程序就死掉了。 显式链接一般是指在程序运行中,由程序代码用LoadLibrary和LoadLibraryEx函数来加载动态库。这两个函数仅仅是把库文件映射到你的进程地址空间中,并不会查找你要使用的函数的地址。如果这些函数成功,就会返回库文件在你的进程中的映像的基址,随便你就可以使用这个基址来调用GetProcAddress()函数来得到你要用的库中的函数的地址了。如果LoadLibrary函数失败,就会返回NULL,并不会强制杀死你的应用程序。
以上就是关于在程序编译过程中,为什么不大量使用静态链接类的库文件全部的内容,包括:在程序编译过程中,为什么不大量使用静态链接类的库文件、动态链接库和静态链接库的区别、eps数据狗论坛的帖子链接为静态链接等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)