我有两种情况。假设我有 3 个导出 C++ 符号的共享库,每个库都是用 VS7.1、VS8 和 VS9 构建的。我在 VS9 中编译了所有 3 个。出于某种原因,这行得通。我不需要为 VS9 链接器重新编译 VS9 中的前 2 个库来成功找到符号并链接它们。
现在,如果我有一个只使用 C 语法(extern "C")导出符号的库,这是否相同?我听说有人说 C 的 ABI 是标准化的,因此可以保证您可以在所有版本的 Visual Studio 中使用在 Visual Studio 8 中编译的 C 库。
基本上,所有这些东西的组合是令人困惑的。我不确定在不同版本的 Visual Studio 之间链接 C++ 和基于 C 的共享库(使用它们相应的导入库)之间有什么保证。我想听到关于 C和C++ 导入或静态库在任何其他版本的 Visual Studio 上的向前/向后兼容性的普遍共识。
我之所以出现这种情况,是因为我使用的一些闭源库是在 Visual Studio .NET 2003 (VS7.1) 中编译的。我的团队认为这将我们锁定在 VS 7.1 编译器上,但是我已经在 VS8 和 VS9,甚至 VS2010 中测试了这些库,并且它们链接得很好。但是,我不确定这其中的内在危险。请注意,有问题的库有一个 C 变体和一个 C++ 变体。基本上,C 变体是标准 C 导出,而 C++ 库是 C 库和导出类的抽象。