1

我有一个使用 Visual Studio 2002 C (v7.0) 编译器和英特尔 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”提供给第 3 方软件开发人员怎么办?我对他们有什么要求?

4

1 回答 1

2

过去,混合 C 运行时对我不起作用。我可以看到这种工作{也许}的唯一方式是,如果您在静态链接的 C-Runtime 的边界内完全隔离堆栈/堆的使用[没有任何东西通过参数跨越边界,那么您的 vs2009if9 是什么值.lib 提供]。

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

于 2009-01-20T19:48:27.677 回答