有些项目为 C(以及可能的 C++ - 不确定)库提供了一组“Windows”二进制文件。例如,请参阅右侧的链接这个 libxml 相关页面.
我很确定没有办法在 VC++ .lib 文件和 MinGW GCC .a 文件之间进行转换,因此将它们称为“Windows”而不是“Microsoft”二进制文件似乎有点误导。但令我感到惊讶的是,不同的 VC++ 版本显然不需要不同的二进制文件。
我似乎记得,很多年前,在为跟踪器风格的音乐程序(Jeskola Buzz)编写插件时遇到问题,因为该程序使用的是 VC++6,而我已经升级到 VC++7。我不记得确切的问题 - 它可能部分与 DLL 相关,但我知道那些不需要关心 VC++ 版本。我认为问题与提供的 .lib 文件有关,也可能与它们链接到的运行时库有关。不过那是很久以前的事了,所以一切都有点模糊。
Anyway, can由一个版本的 MS VC++ 编译的库是否可以链接到使用另一版本构建的项目中?有哪些限制(如果有)?
我对 C 和 C++ 库都感兴趣,这些库将从 C++ 项目中调用(我很少使用 C,除了从 C++ 调用的 C 库)。
MS COFF 格式(.lib、.obj 等)对于所有 VC++ 版本甚至其他语言都是相同的。
问题是 .obj 文件依赖于其他 .obj (.lib) 文件。
对于 C++ 代码,很可能代码无法使用新版本的 VC++ 标准库实现进行编译。例如,使用旧版本的 CRTextern "C++" void internal_foo(int)
,以及较新的 CRT 使用extern "C++" void internal_foo(int, int)
,因此链接器将失败并出现“无法解析的外部符号”错误。
对于 C 代码,代码有机会编译,因为对于extern "C"
,符号名称不编码整个签名。但在运行时应用程序将在调用此函数后崩溃。
如果某些数据结构的布局发生变化,链接器将检测不到它,也会发生同样的事情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)