C++11和C++03之间的库兼容性
Library compatibility between C++11 and C++03
我正在C++11中开发一个应用程序,使用g++-4.7和-std=C++0x
我的应用程序链接到一些使用g++-4.7编译的共享库,但没有-std=c++0x指令。
不幸的是,什么都不起作用,这意味着我在使用外部库类和方法时有一些奇怪的行为。(当然,在没有-std=c++0x的情况下编译我的应用程序效果很好)。
-
这是预期行为还是编译器错误?
-
有什么变通方法(比如
extern
C关键字)吗?
标准库已经更改,-std=c++0x
编译器标志将决定库的哪个部分正在使用。试图在同一程序中使用两个版本,就违反了"一个定义规则"(对于标准库中每个使用的元素,同一标识符都有两个定义)。
我认为没有什么简单的事情可以克服这种限制。您必须确保只使用一个版本的库(即,在包含标准头之前定义适当的宏,以在这些库中禁用C++11),即使这样,我也不确定生成的代码是否仍然不会破坏ODR(如果C++11扩展以不同的方式编译C++03库代码)。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 在cuda线程之间共享大量常量数据
- 为什么库API+编译器ABI足以确保具有不同版本gcc的对象之间的兼容性
- 启用和禁用 RTTI 的模块之间的兼容性
- 类型定义之间的兼容性问题
- Mac和Linux机器之间的正则兼容性问题
- ABI发布和调试之间的兼容性
- 维护OpenCV 2和OpenCV 3之间的代码兼容性
- SQL Server 2005 & 2012 与 C++ 之间的兼容性
- .NET 和 Linux 之间的 GUID/UUID 兼容性问题
- 编译器之间的 Qt DLL 兼容性
- C++11和C++03之间的库兼容性
- VS2010和VS2012之间的二进制C++库兼容性
- *.dll *的兼容性.一个*.VisualStudio和gcc之间的lib *.def
- NDIS 版本和 Windows 版本之间的兼容性问题
- Ubuntu和OS-X之间的头文件兼容性
- C和c++之间的内存布局兼容性
- VS 2010 和 VS 2010 SP1 C++二进制文件之间的二进制兼容性