为什么C / C ++'obj'文件仅对特定编译器有效?

时间:2016-08-24 18:24:40

标签: visual-c++

在尝试将C ++项目链接到第三方静态库(.lib)之后,我想我已经通过验证我使用编译.lib文件的相同编译器编译我的项目来解决了这个问题。 (MSVC11)。

在此之前,我假设所有.obj文件都是等效的,因此我可以使用.lib文件(包含各种.objs),并将其用于我将来可能要开发的任何其他项目。但是,这是一个不正确的假设。

所以我很好奇为什么(在MSVC的上下文中).obj文件与编译器的一个版本不同。假设您的目标是x86应用程序,无论您是否使用MSVC11 / 12/14进行编译,obj文件是否都不应包含相同类型的指令?

TLDR;为什么我不能将项目链接到使用不同MSVC编译器创建的.obj?

1 个答案:

答案 0 :(得分:1)

那是因为它可能链接到另一个版本的Visual C ++运行时库,这与您使用的版本不兼容。

如果尝试从中公开C ++对象,这个问题甚至可以用于DLL。