c++ - 静态库是否避免了名称重整问题?

标签 c++ visual-studio-2008 static-libraries porting visual-c++-6

我有一个用 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/

相关文章:

asp.net-mvc - 使用 Visual Studio 调试,ASP.NET MVC 上的 URL 错误

c - 在 VS2010 或 VS 2008 中打开现有 MakeFile 项目进行调试

c++ - CMake 没有将共享库的链接依赖项传播到我的可执行文件

ios - 动态库镜像不包含x86_64、i386架构

c++ - 打印出索引的所有组合

c++ - 解释指针的这种情况

visual-studio-2008 - 如何使用 Visual Studio 2008 Team Suite 进行 Web 测试

ios - 在创建通用静态库时使用 lipo vs "valid architecture"

c++ - 如何根据构造函数参数为类成员函数模板化代码

c++ - 字符 *数据 = "abc";免费((无效*)数据);为什么要进行 void* 转换?有必要吗?