Windows运行时库依赖项和纯C代码 Windows上的C++,重要的是所有链接在一起的库都是用同一个C++运行库编译的。这同样适用于纯C代码吗

Windows运行时库依赖项和纯C代码 Windows上的C++,重要的是所有链接在一起的库都是用同一个C++运行库编译的。这同样适用于纯C代码吗,c++,c,windows,linker,libraries,C++,C,Windows,Linker,Libraries,更具体地说,我想为许多不同的VisualStudio版本发布SDK,包括静态和动态版本。此SDK与libpng链接,libpng是一个C项目(不是C++)。我是否仍然必须为每个Visual Studio版本构建一个二进制libpng,或者运行库的C部分是否相同?即使使用纯C代码,也不能出现在一个模块中使用malloc分配的内存在另一个模块中释放的情况。这不仅仅是使用相同版本的库的问题:为了支持这种跨模块内存操作,模块必须使用库的相同实例。这取决于特定代码。如果不同的模块使用不同的C运行时实例,那

更具体地说,我想为许多不同的VisualStudio版本发布SDK,包括静态和动态版本。此SDK与libpng链接,libpng是一个C项目(不是C++)。我是否仍然必须为每个Visual Studio版本构建一个二进制libpng,或者运行库的C部分是否相同?

即使使用纯C代码,也不能出现在一个模块中使用malloc分配的内存在另一个模块中释放的情况。这不仅仅是使用相同版本的库的问题:为了支持这种跨模块内存操作,模块必须使用库的相同实例。

这取决于特定代码。如果不同的模块使用不同的C运行时实例,那么您需要检查很多事情,例如,释放内存块的模块总是分配给它的模块;不要试图跨模块边界发送C运行时流;在模块边界上不使用errno或其他全局变量;等等