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

时间:2012-04-04 15:14:01

标签: c++ c++11

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

不幸的是,没有任何作用,这意味着我在使用外部库类和方法时会有一些奇怪的行为。 (当然,在没有-std = c ++ 0x的情况下编译我的应用程序可以正常工作。)

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

  2. 任何解决方法(类似于extern C关键字)?

1 个答案:

答案 0 :(得分:11)

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

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