我正在使用g++-4.7和-std=c++0x开发一款C++11应用程序。 我的应用程序链接了一些使用g++-4.7编译的共享库,但没有使用-std=c++0x指令。 不幸的是,我在使用外部库类和方法时遇到了一些奇怪的行为。(当然,在没有-std=c++0x的情况下编译我的应用程序可以正常工作)。 这是一个预期的行为还是编译器错误? 是否有任何解决方法(类似于extern C关键字)?
标准库已经发生了改变,编译器选项-std=c++0x将决定库的哪一部分被使用。如果在同一个程序中尝试使用这两个版本,您将违反单一定义规则 (对于标准库中每个已使用的元素,您有两个相同标识符的定义)。 我认为没有什么简单的方法可以克服这个限制。您必须确保只使用一个版本的库(即在包含标准头文件之前定义适当的宏以禁用C++11库内部),即使这样,我也不确定生成的代码是否仍会破坏ODR(如果C++11扩展以不同方式编译C++03库代码)。
-std=c++0x
重新编译库? - leftaroundabout