C++11和C++03之间的库兼容性

Library compatibility between C++11 and C++03

本文关键字:兼容性 之间 C++03 C++11      更新时间:2023-10-16

我正在C++11中开发一个应用程序,使用g++-4.7和-std=C++0x
我的应用程序链接到一些使用g++-4.7编译的共享库,但没有-std=c++0x指令。

不幸的是,什么都不起作用,这意味着我在使用外部库类和方法时有一些奇怪的行为。(当然,在没有-std=c++0x的情况下编译我的应用程序效果很好)。

  1. 这是预期行为还是编译器错误?

  2. 有什么变通方法(比如externC关键字)吗?

标准库已经更改,-std=c++0x编译器标志将决定库的哪个部分正在使用。试图在同一程序中使用两个版本,就违反了"一个定义规则"(对于标准库中每个使用的元素,同一标识符都有两个定义)。

我认为没有什么简单的事情可以克服这种限制。您必须确保只使用一个版本的库(即,在包含标准头之前定义适当的宏,以在这些库中禁用C++11),即使这样,我也不确定生成的代码是否仍然不会破坏ODR(如果C++11扩展以不同的方式编译C++03库代码)。