Я пытаюсь построить OpenNN библиотека в соответствии с инструкциями Вот. Но после
make opennn
Я получаю следующий вывод (не полный):
[2%] Built target tinyxml2
[4%] Building CXX object opennn/CMakeFiles/opennn.dir/variables.cpp.o
In file included from /home/wolfgang/Downloads/OpenNN/opennn/variables.h:32:0,
from /home/wolfgang/Downloads/OpenNN/opennn/variables.cpp:16:
/home/wolfgang/Downloads/OpenNN/opennn/vector.h: In member function ‘bool OpenNN::Vector<T>::Lillieforts_normality_test() const’:
/home/wolfgang/Downloads/OpenNN/opennn/vector.h:1144:20: error: ‘erfc’ is not a member of ‘std’
Fx = 0.5 * std::erfc((mean - (*this)[i])/(standard_deviation*std::sqrt(2)));
вышеуказанный вывод заканчивается
make[3]: *** [opennn/CMakeFiles/opennn.dir/variables.cpp.o] Error 1
make[2]: *** [opennn/CMakeFiles/opennn.dir/all] Error 2
make[1]: *** [opennn/CMakeFiles/opennn.dir/rule] Error 2
make: *** [opennn] Error 2
Я думаю, что я должен использовать -std=c++11
или что-то, но я не знаю точно, как. Я пытался добавить эту строку
CXXFLAGS += -std=c++11
в Makefile
Но это не работает.
Я не знаю о cmake
а также make
что-нибудь. Но дело в том, что эти ошибки были вызваны несовместимостью с более старыми c++xx
,
Удалите std ::, попробуйте это:
Fx = 0.5 * erfc((mean - (*this)[i])/(standard_deviation*std::sqrt(2)));
Решение А — обновить CMake
Вам нужна как минимум версия 3.1 CMake, поэтому вам нужно обновить ее, если ваша версия ниже.
Я столкнулся с этой проблемой в Ubuntu 14.04, которая по умолчанию использует версию 2.8 (имя пакета «cmake
«); удалить его и установить»cmake3
«вместо этого (в Ubuntu 14.04»cmake3
«содержит CMake 3.5).
Так что для Ubuntu 14.04 официальная документация содержит ошибку и «sudo apt-get install cmake
«должен быть заменен на»sudo apt-get install cmake3
«; но учтите, что это может не относиться к разным (более новым) системам.
Решение B — редактировать CMakeLists
Это работает с более старой версией CMake (как минимум 2.6).
Обновить «CMakeLists.txt
«файл в корневом каталоге исходного репозитория OpenNN; добавить строку»set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
«под чертой»set (CMAKE_CXX_STANDARD 11)
«(должна быть 5-я строка).
объяснение
OpenNN использует «set (CMAKE_CXX_STANDARD 11)
«сказать CMake, что должен использоваться стандарт C ++ 11. это поддерживается начиная с CMake 3.1. Эта проблема не улавливается старым CMake, потому что первая строка CMakeLists в OpenNN — «cmake_minimum_required(VERSION 2.6)
«который говорит, что« минимальная версия — 2,6 ». Это позволяет запускать CMake в OpenNN с версией CMake, которая не поддерживает все используемые функции (OpenNN), что вызывает эту проблему.
Второе решение (решение B) просто добавляет необходимое-std=c++11
msgstr «флаг для компилятора вручную.