我有一个用 Visual Studio 2003 SP1 编写的 C++\MFC 应用程序链接到外部静态库“SomeExtStaticLib.lib”。我还包括随“SomeExtStaticLib.lib”一起提供的头文件,以在我的应用程序中创建对象。
SomeExtStaticLib.lib 是一个用VC6构建的静态库。
现在,我正在将我的应用程序迁移到 Visual Studio 2008。
我有一个非常基本的问题。
我是否也应该将“SomeExtStaticLib.lib”迁移到 VS2008 编译的? 当我尝试在我的 VC9 编译应用程序中使用这个 VC6 编译的“SomeExtStaticLib.lib”时,它没有给出任何链接器错误。我期待至少有一些名称修改问题。
静态库是否消除了名称重整问题?
最佳答案
问题不在于静态链接还是动态链接,也不在于名称
加工。问题是所有使用的二进制兼容性之一
在界面中。因此,例如,除非我大错特错,否则
std::string
的定义在 VC6 和 VC9 之间发生了变化,带有
不同的布局。因此,如果任何代码使用 std::string
,您将拥有
重新编译,或在运行时出现奇怪且无法解释的错误。
一般来说,最好假设没有二进制兼容性
不同版本的编译器,甚至不同的编译
涉及选项,除非供应商另有保证。 (虽然
一些常识是有序的:您可以自由组合仅
例如,控制警告。但要注意 /D
会导致添加
调试要生成或不生成的代码。)
关于c++ - 静态库是否避免了名称重整问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6342171/