2015-05-07 169 views
0

我正在使用Visual Studio 2013开发C++静态库* .lib。我得到了使用Visual Studio 2010编译器编译库的请求,但是我没有将它安装在开发人员计算机上。在Visual Studio 2013中编译静态库

编译动态库* .dll时,可以使用将C运行时打包到dll中的开关/ MT。动态库因此变得更大。但是,当我使用/ MT开关时,静态库变得更小(5MB - > 4.9MB),这与我预期的相反。

问题: 1.我可以在Visual Studio 2013中构建静态库,以便稍后可以由Visual Studio 2010编译器使用它吗? 2./MT开关是否正确吗?

回答

2

静态库通常只与构建它们的工具集兼容。对于任何使用标准C++库/ STL的情况尤其如此,这就是为什么新版本的VS将嵌入_MSC_VER标记用于STL标头的任何用途,如果您试图将它们混合在一起,将会产生链接时错误。

使用与使用它们的项目相同的CRT设置(/ MT,/ MD,/ MTd,/ MDd)构建静态库也很重要。

使用C++或COM导出使用CRT DLL的DLL实际上是唯一可以安全地与不同版本的编译器混合使用的'稳定'库。否则,您应该为每个要支持的版本获取工具集,并构建.lib所需的所有风格。