如何在VC++中选择链接方法的最佳实践是什么?任何/所有东西都可以静态链接吗?
在动态链接项目中,链接库的相对/绝对位置是否重要?
优缺点是什么?
添加:我主要是指lib文件。它们的行为与dll链接相同吗?
DLL(动态链接库)可以使运行时工作集更小,如果应用程序以这样的方式编写,以管理 DLL 之间的上下文切换(例如,对于较大的应用程序,您可以将应用程序功能划分为逻辑边界,以在自包含的 DLL 中实现,并允许加载器在运行时加载)。
虽然 DLL 主要是安装/复制到与 .exe 相同的文件夹中,但要求遵守加载器的加载规则(其中包括系统文件夹(不好的想法),PATH,当前目录[请参阅 LoadLibrary API 帮助文档以获取完整的优先级描述])。
您“添加”了有关 LIB 文件的评论。在动态和静态两种情况下,都使用 LIB 文件进行链接。但在动态加载的情况下,您需要将 .exe 与所有依赖的 DLL 一起交付(LIB 文件包含相应 DLL 的导出入口点)。
我喜欢使用 DLL,因为我的应用程序往往比较大且分段,这使我能够仅交付那些更新的组件(DLL)。我们甚至将业务逻辑与演示分开放在自己的 DLL 中[允许资源仅 DLL 的本地化独立于逻辑]。
使用 DLL 进行编程会迫使您遵守导出类/方法或函数的契约。
使用dll的明显优势是可以升级单个组件而不仅仅是整个应用程序(理论上),并共享公共组件(通过将它们封装在dll中)。不幸的是,在实践中,即使定义良好,dll之间也存在一定程度的绑定。这导致您需要升级匹配集中的dll,并隔离不兼容的dll。
如果没有小心地进行DLL升级,可能会导致所谓的DLL Hell问题。
在现实生活中,应用程序倾向于将其使用的所有dll放在可执行文件的同一目录中。这样可以进行升级,但不利于共享。然后,升级包括与Windows中央存储库中的DLL同步升级应用程序目录中的DLL集。