Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我正在使用 g++-4.7 和 -std=c++0x 在 C++11 中开发应用程序。 我的应用程序链接到一些使用 g++-4.7 编译的共享库,但没有 -std=c++0x 指令。
不幸的是,没有任何效果,这意味着我在使用外部库类和方法时有一些奇怪的行为。(当然编译我的应用程序没有 -std=c++0x 工作正常)。
这是预期的行为还是编译器错误?
任何解决方法(类似于externC 关键字)?
extern
标准库已更改,-std=c++0x编译器标志将确定正在使用库的哪个部分。通过尝试在同一程序中使用这两个版本,您违反了一个定义规则(对于标准库中的每个使用的元素,您有两个相同标识符的定义)。
-std=c++0x
我认为没有什么简单的方法可以克服这个限制。您必须确保只使用一个版本的库(即在包含标准头文件之前定义适当的宏以禁用这些库中的 C++11),即使这样我也不确定生成的代码是否仍然不会打破 ODR(如果 C++11 扩展以不同方式编译 C++03 库代码)。