C++ 链接使用早期版本的Visual Studio生成的第三方静态库时出错

C++ 链接使用早期版本的Visual Studio生成的第三方静态库时出错,c++,c,visual-studio-2008,visual-studio-2005,calling-convention,C++,C,Visual Studio 2008,Visual Studio 2005,Calling Convention,我正在从事一个链接到第三方静态库(herin称为EXTERNALLIB)的项目。在VisualStudio2005中,我能够链接到EXTERNALLIB并创建一个可用的可执行文件。现在我们正在使用Visual Studio 2008,我收到以下错误: fatal error C1047: The object or library file EXTERNALLIB was created with an older compiler than other objects; rebuild old

我正在从事一个链接到第三方静态库(herin称为EXTERNALLIB)的项目。在VisualStudio2005中,我能够链接到EXTERNALLIB并创建一个可用的可执行文件。现在我们正在使用Visual Studio 2008,我收到以下错误:

fatal error C1047: The object or library file EXTERNALLIB was created with an older compiler than other objects; rebuild old objects and libraries.
我有没有办法告诉编译器正确链接到EXTERNALLIB?我相信这个问题可能与特定的调用约定(stdcall、cdecl、clrcall、thiscall)有关。我可以在新程序中指出旧库的正确调用约定吗?我是否可以向我们的供应商提供具体的反馈(例如在头文件中使用APIENTRY),以便在将来的编译器升级中不会出现此问题


<代码>用C++编写。我无法访问EXTERNALLIB的代码,因此我无法自己重建它。

您的问题可能是“代码是用C++编写的”。C++链接的ABI本质上完全没有任何标准指定,并且从编译器到编译器是众所周知的变化。我怀疑VS试图告诉您ABI再次发生了变化,因此它无法直接链接到库

<>这个问题常常在DLL中实现C++对象而加剧,但幸运的是,这里没有问题。 解决方案的一种方法应该是使用C-可调用适配器对已发布的EXTERNALLIB API进行蒙皮,并将整个API链接到一个DLL中。使用较旧的VS版本构建皮肤(最坏情况下,免费版本仍然可以找到)。确保仅公开
extern“C”
函数。尤其要确保没有全局对象从DLL中公开(尽管它们可能需要存在于皮肤中)

最好的答案是回到EXTERNALLIB的供应商那里,礼貌地报告与当前VS链接失败是一个bug,并请求重新构建版本