我正在使用 CMake 2.8.11 和 GCC 4.8.2。我正在构建一些在 MS VS 2012 中构建良好的 C++ 代码,std::shared_ptr
但是当我使用 GCC 4.8.2 在 RHEL6 上尝试相同的代码时,我立即遇到了以下错误:
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
它编译并运行正常。对于我的实际应用程序,我-std=c++11
也在我的配置系统中将标志添加到链接器标志(除了编译器标志)CMake
,但我仍然看到相同的错误。继续检查CMakeCache
以查看标志是否已注册财产,但任何想法都值得赞赏。
编辑2:
CMakeCache
令人惊讶的是,我发现-std=c++11
标志没有被添加到CMAKE_CXX_FLAGS
等。所以这一定与错误有关。我正在尝试修复它,以便它实际上采用此标志。谢谢大家。