【问题标题】:Mixing Static Libraries of C Code built from different versions of Visual Studio 2002 and later混合使用不同版本的 Visual Studio 2002 及更高版本构建的 C 代码静态库
【发布时间】:2009-01-20 19:37:10
【问题描述】:

我有一个使用 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 方软件开发人员会怎样?我对他们有什么要求?

【问题讨论】:

    标签: visual-studio sdk static-libraries mixing


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-01
      • 2021-10-01
      • 1970-01-01
      • 2012-04-25
      • 2010-09-21
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多