RHEL6 上的自定义 GCC 4.8.2 给出了 std::shared_ptr 的构建错误
Custom GCC 4.8.2 on RHEL6 gives build error with std::shared_ptr
我正在使用CMake 2.8.11和GCC 4.8.2。我正在构建一些C++代码,这些代码使用了在MS VS 2012中构建良好的std::shared_ptr
但是当我使用GCC 6在RHEL6上尝试相同的代码时,4.8.2,我立即遇到了以下错误:
error: 'shared_ptr' is not a member of 'std'
我发现了这个问题,我认为已经解决了这个问题,我立即将-std=c++11
添加到我的CMAKE_CXX_FLAGS
中,但我仍然不断遇到错误。我在 CMake 中添加标志只是使用:
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11" CACHE STRING "Add C++ 11 flags")
我使用以下方法在 CMake 中设置我的自定义编译器:
SET(GCC_DIR "</path/to/custom>/gcc")
SET(CMAKE_CXX_COMPILER "${GCC_DIR}/bin/g++ CACHE FILEPATH "CXX compiler")
SET(CMAKE_C_COMPILER "${GCC_DIR}/bin/gcc CACHE FILEPATH "C compiler")
包含的是
#include <memory>
这反过来又有
#include <bits/shared_ptr.h>
它定义了shared_ptr
类。所以我不确定为什么我总是收到错误(是的,我在添加-std=c++11
编译器选项后清除了缓存并重建(。任何想法都非常感谢。
编辑 1:
我创建了一个简单的程序(main.cpp(,如下所示:
#include <memory>
#include <iostream>
int main() {
std::shared_ptr<int> pint = std::make_shared<int>();
std::cout << "Pint points to " << pint.get() << "n";
return 0;
}
然后我使用 <path/to/custom/>g++ main.cpp -o prog
构建它,并立即遇到了同样的错误(上图(。接下来我做了:<path/to/custom/>g++ -std=c++11 main.cpp -o prog
,它可以编译并运行正常。对于我的实际应用程序,我在CMake
配置系统中也向链接器标志添加了 -std=c++11
标志(除了编译器标志(,但我仍然看到相同的错误。继续检查CMakeCache
以查看标志是否已注册财产,但任何想法都值得赞赏。
编辑2:
令人惊讶的是,我在CMakeCache
中发现-std=c++11
标志没有添加到CMAKE_CXX_FLAGS
等。所以这一定与错误有关。我正在尝试修复它,以便它实际上采用此标志。谢谢大家。
答案证实了我问题的 EDIT 2 中的预感。显然,CMake 2.8.x
没有使用我的问题中显示的语法(根据文档(使用 SET
命令附加到变量CMAKE_CXX_FLAGS
;我尝试附加SET
命令的其他变体,但无济于事。
所以最后,我没有追加,而是单独分配了何时启用 C++11 和何时禁用的情况,如下所示:
IF(USE_C++11)
...
ELSE(USE_C++11)
...
ENDIF(USE_C++11)
这工作正常。感谢@nos提出一个孤立的例子的想法。
- 使用std::multimap迭代器创建std::list
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从持续时间构造std::chrono::system_clock::time_point
- std::具有相同基类的类的变体
- std::向量与传递值的动态数组
- 使用std::vector的OpenCL矩阵乘法
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- std::condition_variable::wait()如何评估给定的谓词
- 如何获取std::result_of函数的返回类型
- std::原子加载和存储都需要吗
- 将对象移动到std::shared_ptr
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 引用 std::shared:ptr 以避免引用计数
- boost::shared_ptr和std::shared-ptr的同居
- 我可以用std::shared_ptr而不是boost::shared-ptr构建boost库吗
- std::dynamic_pointer_cast从基到派生的std::shared返回NULL
- QSharedPointer VS std::tr1::shared_ptr VS boost::tr1::shared