无法使用 GCC 5.1 工具链编译 C++11 源代码



我正在尝试在 Ubuntu 上使用 GCC 5.1 编译一个使用 C++11 功能编写的库。但是,它抱怨std::unique_ptr没有定义。

gcc (Ubuntu 5.1.0-0ubuntu11~14.04.1) 5.1.0
g++ (Ubuntu 5.1.0-0ubuntu11~14.04.1) 5.1.0

CXX 标志:

-std=c++11 -Wall -Wextra -Weffc++ -pedantic

输出:

error: ‘unique_ptr’ in namespace ‘std’ does not name a template type
         std::unique_ptr< detail::RegexImpl > m_pimpl;

但是,我能够在OSX上编译完全相同的代码。

Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)

CXX 标志:

-stdlib=libc++ -std=c++11 -Wall -Wextra -Weffc++ -pedantic

我做错了什么?

你没有做错任何事。库的源缺少#include <memory>

这只是库作者的一个不幸错误。令人惊讶的是,人们依赖某些标准标头,恰在其特定实现中包含其他标准标头,而不检查他们是否使用了他们应该使用的所有#include语句。

您现在可以破解#include,但从长远来看,如果项目接受补丁,您应该向库作者提出错误,甚至可能贡献一个补丁。

相关内容

  • 没有找到相关文章

最新更新