有些项目为C(以及可能的C++ - 不确定)库提供了一组"Windows"二进制文件.例如,请参阅此libxml相关页面右侧的链接.
我很确定没有办法在VC++ .lib文件和MinGW GCC .a文件之间进行转换,所以称它们为"Windows"而不是"Microsoft"二进制文件似乎有点误导.但我也很惊讶,不同的VC++版本不需要不同的二进制文件.
很多年前,我似乎记得在为跟踪器风格的音乐程序(Jeskola Buzz)编写插件时遇到问题,因为该程序使用的是VC++ 6,而且我已升级到VC++ 7.我不记得确切的问题 - 它可能部分与DLL有关,但我知道那些不需要关心VC++版本.我认为这个问题与提供的.lib文件有关,也可能与它们链接到的运行时库有关.不久之前,所以它有点含糊不清.
无论如何,可以通过MS VC的一个版本编译库++链接到另一个版本构建项目?有什么限制,如果有的话?
我对C和C++库感兴趣,这些库将从C++项目调用(我很少使用C,除了从C++调用的C库).
MS COFF 格式(.lib、.obj 等)对于所有 VC++ 版本甚至其他语言都是相同的。
问题是 .obj 文件依赖于其他 .obj (.lib) 文件。
对于 C++ 代码,很可能代码无法使用新版本的 VC++ 标准库实现进行编译。例如,旧版本的 CRT 使用extern "C++" void internal_foo(int),而较新的 CRT 使用extern "C++" void internal_foo(int, int),因此链接器将失败并出现“无法解析的外部符号”错误。对于 C 代码,代码有可能编译,因为对于extern "C",符号名称不会对整个签名进行编码。但在运行时应用程序将在调用此函数后崩溃。
如果某些数据结构的布局发生变化,链接器将检测不到它,也会发生同样的事情。