我在VS2008中开发一个MFC DLL项目。 dll编译好了,我可以从承包商为我开发的GUI exe中调用它。需要为我的dll安装Visual C ++ Redistributables(也许是用C ++开发的exe)
另一家公司希望将我的dll许可用于他们的C ++ exe。他们要求我的dll没有外部依赖。是否可以编译我的DLL以删除所有外部依赖项,如Visual C ++ Redistributables?
设置/ MT是否这样做? 我读过Should I compile with /MD or /MT?这有点意义,但我很担心地狱。
这可以创建exe调用我的DLL的问题吗?我在某处读到了exe和dll需要使用相同的Visual C ++ Redistributables等。
我对C ++有些新意。任何建议表示赞赏。
答案 0 :(得分:1)
您可以链接CRT的静态版本(是,/ MT),但这非常危险。你必须仔细检查你的出口。确保它们都不返回C ++对象,甚至不返回std :: string(或CString)。或者客户端代码必须发布的任何指针。这会出错,因为客户端将拥有自己的CRT副本并使用不同的堆。这会泄漏返回的对象/指针,当他们的安全堆管理器检测到指针不属于堆时,会使Vista和Win7上的程序崩溃。
关于“外部依赖”究竟意味着什么可能是一个争论的问题。依赖CRT并不完全是外部的。但是,您必须为它们提供在他们使用的相同Visual Studio版本上构建的DLL版本。只有在版本匹配时才能共享CRT。
答案 1 :(得分:1)
为什么不将所有相关dll打包到安装程序包中并发布给您的客户?
我见过一些软件包确实包含了vc的依赖库......