在VC++ 2008项目中使用VC++ 2010运行时库

Ade*_*ick 9 c++ stl visual-studio-2010 visual-studio-2008

我致力于优化算法,因此性能非常重要.与VS 2008相比,在VS 2010中编译时,该算法的速度提高了约8倍.谷歌搜索显示这不是我的错(参见例如/sf/answers/389212911/).问题是最终项目必须在VS 2008下构建.

我倾向于在VS 2010中将我的算法构建为DLL,然后将其链接到主项目.是否可以在VS 2008下使用VC++ 2010运行时库和我的DLL?如果是这样,那么最痛苦的方法是什么?还有其他想法吗?谢谢.

Ste*_*eed 1

如果您要求除了将 2010 部分移到外部 DLL 之外之外,还有任何其他方法可以将 2008 和 2010 库合并到一个可执行文件中,那么答案可能是“没有其他简单的方法可以实现这一目标”。

但是,如果您不想“在 VS 2008 下使用 VC++ 2010 运行时库”(即在旧的 2008 IDE 中针对 2010 库进行构建),而是“在 2008 年编译的程序中使用 2010 年编译的 DLL” ,这是完全有可能的。

正如我们在项目中所做的那样,最简单的方法是针对静态链接标准库(MFC,如果您使用它)构建(.exe 和 DLL),然后LoadLibrary在 .exe 中使用来加载 DLL。在 DLL 中,您可以导出 ( _declspec (dllexport)) 函数(最好在extern "C" {}防护内部)并通过 .exe 在 .exe 中使用它GetProcAddress

静态链接和显式加载可以避免由于不同运行时而导致的许多不一致的错误。

如果您担心 DLL 加载和函数调用成本,您可以尝试使这些调用尽可能少(也许不仅可以将算法,还可以将一些更高级的逻辑移至 DLL 中)。也看到这个伊西

您可以使用本机多目标在一个 IDE (2010) 中构建所有代码(但是您仍然需要分别针对 v9 和 v10 库分别构建主应用程序和 DLL)。