无法使用 GCC 5.1 工具链编译 C++11 源代码
Can't compile C++11 source using GCC 5.1 toolchain
我正在尝试在 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>
.
这只是图书馆作者的一个不幸错误。人们 to rely on certain standard headers just so happening to include other standard headers on their particular implementation 没有检查他们是否使用了他们应该使用的所有 #include
语句,这是令人惊讶的普遍现象。
你现在可以破解 #include
,但从长远来看,你应该向库作者提出错误,甚至可能贡献一个补丁,如果项目接受补丁。
我正在尝试在 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>
.
这只是图书馆作者的一个不幸错误。人们 to rely on certain standard headers just so happening to include other standard headers on their particular implementation 没有检查他们是否使用了他们应该使用的所有 #include
语句,这是令人惊讶的普遍现象。
你现在可以破解 #include
,但从长远来看,你应该向库作者提出错误,甚至可能贡献一个补丁,如果项目接受补丁。