我有两种情况。假设我有三个使用VS7.1、VS8和VS9编译的导出C++符号的共享库。我在VS9中编译了全部3个库,由于某种原因,这是有效的。我不需要重新在VS9中编译前两个库,VS9链接器就可以成功地找到符号并与它们进行链接。
现在,如果我有一个只使用C语法(extern "C")导出符号的库,是否相同呢?我听说过人们说C的ABI是标准化的,因此你可以保证在所有版本的Visual Studio中使用一个在Visual Studio 8中编译的C库。
基本上,所有这些组合令人困惑。我不确定在不同版本的Visual Studio之间链接针对C++和C库(使用相应的导入库)之间的保证。我想听听关于C和C++导入或静态库的向前/向后兼容性的普遍共识。
我提出这个问题的原因是因为我正在使用已编译Visual Studio .NET 2003(VS7.1)的闭源库。我的团队认为这将我们锁定到VS 7.1编译器,但我已经在VS8和VS9甚至VS2010中测试了这些库,它们可以很好地链接。然而,我不确定这样做的潜在危险。请注意,涉及的库有C变体和C++变体。基本上,C变体是标准C导出,而C++库是对C库的抽象,并导出类。