混合使用不同版本的Visual Studio 2002及更高版本构建的C代码的静态库

时间:2009-01-20 19:37:11

标签: visual-studio sdk static-libraries mixing

我有一个使用Visual Studio 2002 C(v7.0)编译器和Intel Fortran 9.0.018编译器编译和链接在一起的C和Fortran例程的静态可链接库。

我的库中的C代码调用并链接到Microsoft C-RunTime(MSCRT)2002静态库(单线程)。我相信2002年CRT库的实际版本号是v7.0

我将此静态库称为“vs2002if9.lib”

我是否可以安全地使用任何更高版本的Visual Studio(2003,2005或2008)静态链接到我的“vs2002if9.lib”,而不用担心调用程序在C运行时调用方面的行为如何?

或者我是否通过混合CRT静态库的版本来创建问题?

如果我向第三方软件开发商提供“vs2002if9.lib”怎么办?我对他们施加了什么要求?

1 个答案:

答案 0 :(得分:2)

混合C运行时在过去对我来说并不起作用。我可以看到这个工作{only}的唯一方式是,如果你完全隔离静态链接的C-Runtime边界内的堆栈/堆的使用[没有通过参数跨越边界但是​​你的vs2009if9是什么值.lib提供]。

例如,如果您要在应用程序中分配指针[堆内存]并将此指针传递给您提供的库,应该使用哪个堆管理器?正确的答案是管理指针的堆管理器,但是您的库不会知道另一个堆管理器。如果您的库分配内存以供应用程序使用,那么它会变得更加丑陋,应用程序有责任使用提供的指针来释放/删除(错误的设计是,但仍然可能)。同样,将使用错误的堆管理器。