[英]Use VC++ 2010 runtime libraries in VC++ 2008 project
我致力于优化算法,因此性能非常重要。 与VS 2008相比,在VS 2010中编译时,该算法的速度提高了约8倍。谷歌搜索显示这不是我的错(参见例如https://stackoverflow.com/a/5560184/890355 )。 问题是最终项目必须在VS 2008下构建。
我倾向于在VS 2010中将我的算法构建为DLL,然后将其链接到主项目。 是否可以在VS 2008下使用VC ++ 2010运行时库和我的DLL? 如果是这样,那么最痛苦的方法是什么? 还有其他想法吗? 谢谢。
运行时不是问题。 没有什么能阻止您将DLL与VC2010运行时链接,然后在其他项目中使用该DLL。 如果这些项目是使用Visual C ++ 2008或任何其他语言构建的,则无关紧要。
棘手的部分是设计DLL接口。 简单地导出一些C ++类是有风险的,因为它会让您暴露出不同编译器之间的不兼容性。 我认为最好的办法是公开C风格的界面或使用COM。 我认为COM是最好的方法,但如果你不熟悉这项技术,那么C风格的界面就能正常运行。 (如果界面很简单,COM也可能被过度杀死。)
如果你要求使用任何其他方法将2008和2010库组合在一个可执行文件中,而不是将2010部分外部移动到DLL中,那么答案可能是“没有其他简单的方法可以实现这一点”。
但是,如果您不想“VC 2008 2010运行时库......在VS 2008下”(即在旧版2008 IDE中针对2010库构建),而是“在2008编译的程序中使用2010编译的DLL” ,这是完全可能的。
正如我们在项目中所做的那样,最简单的方法是针对静态链接的标准库(MFC,如果您使用它)构建(.exe和DLL),然后在.exe中使用LoadLibrary
来加载DLL。 在DLL中,您可以导出( _declspec (dllexport)
)函数(最好在extern "C" {}
内部),并在.exe到GetProcAddress
使用它。
静态链接和显式加载可以避免因不同运行时导致的大量不一致错误。
如果您担心DLL加载和函数调用成本,您可以尝试尽可能少地进行这些调用(可能不仅要移动算法,还要移动更高级别的逻辑到DLL中)。 看到这个也是。
您可以使用本机多目标在一个IDE(2010)中构建所有代码(但是您仍然需要分别针对v9和v10库分别构建主应用程序和DLL)。
如果您小心,可以使用MS文档提供一些提示。 我在此之前已经回答了这个问题:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.