Пользовательский GCC 4.8.2 на RHEL6 выдает ошибку сборки с помощью std :: shared_ptr

Я использую 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и т.д. Так что это должно быть связано с ошибкой. Я пытаюсь исправить это так, чтобы он на самом деле взял этот флаг. Спасибо всем.

0

Решение

Ответ подтверждает догадку РЕДАКТИРОВАТЬ 2 моего вопроса. По-видимому CMake 2.8.x не добавляется к переменной CMAKE_CXX_FLAGS с использованием SET команда с использованием синтаксиса, показанного в моем вопросе (согласно документации); Я пробовал другие варианты SET Команда добавить, но безрезультатно.

Итак, наконец, вместо добавления я назначил отдельно для случая, когда C ++ 11 должен быть включен и когда он должен быть отключен, следующим образом:

IF(USE_C++11)
...
ELSE(USE_C++11)
...
ENDIF(USE_C++11)

Это работало нормально. Спасибо @nos за идею сделать отдельный пример.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]