exe和dll共享相同的静态库

时间:2013-08-29 14:37:39

标签: c++ windows visual-c++ dll

我的应用程序解决方案设置方式如下 - (我使用的是Visual Studio,这是一个VC ++项目)

App Library dependency diagram

注意:Blue项目编译为静态库。

如你所见,exe和dll共享一些静态库(core.lib和utils.lib) 并且exe依次使用DLL(通过使用导入库“加载时动态链接”)。

我的问题是它是一个正确的依赖设置吗? 我看到的问题是,当这个应用程序启动并运行时,进程地址空间中会有一些重复的代码吗?意思是,Core.lib和Utils.lib中的所有函数都会出现两次吗? cos,Exe和DLL将这些代码分别编译到其中。

如果是,处理上述问题的一种方法是将代码专用于dll或保存在exe中并通过导入/导出共享它(b / w exe和dll)。 但我在core和utils中有很多类对象,我不喜欢在头文件中导出/导入这些类对象(通过附加__declspec(dllimport / dllexport))的想法,此外我可能最终将此添加到很多依赖类中对象

这是我的理解,我可能是错的。请提出更正,以及解决此类问题的常用方法是什么?

此致

3 个答案:

答案 0 :(得分:1)

如果你去DLL,你必须一直使用DLL,所有依赖都归结为c-runtime。代码重复(内存占用)不是最糟糕的问题。记住,应用程序分配的内存不能被dll释放,反之亦然,除非两者都使用相同的运行时(dll)。

答案 1 :(得分:0)

是的,Core和Utils代码将被复制。您可以将它们构建为dll并在任何地方使用,而不是将它们构建为静态库。

答案 2 :(得分:0)

我的建议是:只是按照它的方式进行编码,直到问题出现或者出现极大的变化需求为止。