Я использую CMake 2.8.11 и GCC 4.8.2. Я создавал некоторый код C++, который использовал std::shared_ptr
, который отлично строился в MS VS 2012, но когда я попробовал то же самое на RHEL6, используя GCC 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
и он компилируется и работает нормально. Для моего реального приложения я также добавил флаг -std=c++11
к флагам компоновщика (в дополнение к флагам компилятора) в моей системе конфигурации CMake
, но я все еще вижу ту же ошибку. Приступаем к проверке CMakeCache
, чтобы убедиться, что флаги зарегистрированы как собственность, но любые идеи приветствуются.
ИЗМЕНИТЬ 2:
Удивительно, но я обнаружил в CMakeCache
, что флаг -std=c++11
не добавляется к CMAKE_CXX_FLAGS
и т. д. Так что это должно быть связано с ошибкой. Я пытаюсь исправить это так, чтобы он действительно принимал этот флаг. Спасибо всем.
g++ -Wall -std=c++11 example.cpp
, запустите g++ -v, чтобы просмотреть его версию. Если это не сработает, проблема с вашей установкой gcc, если она работает, это проблема с вашей системой сборки. - person nos   schedule 08.01.2016g++ -v
, и он распечатает информацию о версии. - person Mats Petersson   schedule 08.01.2016g++ -v
; если бы я сделал именно это, то да, я бы увидел 4.4.7 или что-то еще по умолчанию с RHEL6; но наша среда настроена на использование GCC 4.8.2 для сборки приложения (опять же, см. фрагмент выше). Так что я не вижу, что запускg++ -v
может сказать мне, чего я еще не знаю. Но да, компиляция небольшой тестовой программы полезна. - person squashed.bugaboo   schedule 08.01.2016scl enable devtoolset-2 bash
. Он устанавливаетPATH
соответствующим образом. - person Brian Cannard   schedule 08.01.2016