静态库是否可以避免名称修改问题?

| 我有一个用Visual Studio 2003 SP1编写的C ++ \\ MFC应用程序链接到外部静态库\“ SomeExtStaticLib.lib \”。我还包括\“ SomeExtStaticLib.lib \”提供的头文件,以在我的应用程序中创建对象。 SomeExtStaticLib.lib是使用VC6构建的静态库。 现在,我将应用程序迁移到Visual Studio 2008。 我有一个非常基本的问题。 我是否还应该将“ SomeExtStaticLib.lib”迁移到VS2008编译的版本? 当我尝试在VC9编译的应用程序中使用此VC6编译的\“ SomeExtStaticLib.lib \”时,它没有给出任何链接器错误。我期待至少一些名称修改问题。 静态库是否消除了名称修改问题?     
已邀请:
        问题不是静态与动态链接之一,也不是真正的名字 乱七八糟。问题是所用一切的二进制兼容性之一 在界面中。因此,例如,除非我犯了个严重错误,否则 ѭ06的定义在VC6和VC9之间改变了, 不同的布局。因此,如果任何代码使用
std::string
, 重新编译,或在运行时出现奇怪且无法解释的错误。 通常,最好尽快假定没有二进制兼容性 不同版本的编译器,甚至不同的编译器 除非卖方另有保证,否则都涉及各种选件。 (虽然 一些常识是为了:您可以自由混合仅 例如,控制警告。但是要当心造成的
/D
是否生成调试代码。)     
        如果应用程序未更改,则需要库中的相同符号集。因此,也许您可​​以链接到使用VC6.0编​​译的库。除非应用程序和库与VC6.0中的兼容(工作)相同,否则根本不关心名称修饰。 我还应该将ѭ3移植到VS2008编译的版本吗? VC6.0和Visual 2008之间存在兼容性问题。是的,您应该使用Visual 2008重建库。 仅仅因为您可以按原样链接到库并不意味着它将正常运行。 静态库是否消除了名称修改问题? 并不是的。他们根本没有做任何特别的事情。     
        静态库与是否进行名称重整无关。...如果您的代码是C ++,则存在重整,如果其C(或C ++中的extern \“ C \”),则不存在重整。只要库和链接它的代码一致,就可以在库中链接。     

要回复问题请先登录注册