我正在尝试根据说明here构建 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
不兼容造成的。
答案 0 :(得分:0)
删除std ::,试试这个:
Fx = 0.5 * erfc((mean - (*this)[i])/(standard_deviation*std::sqrt(2)));
答案 1 :(得分:0)
解决方案A - 更新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)。
更新OpenNN源存储库根目录中的“CMakeLists.txt
”文件;在“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标准。但是,this is supported since CMake 3.1。旧的CMake没有捕获到这个问题,因为OpenNN的CMakeLists的第一行是“cmake_minimum_required(VERSION 2.6)
”,其中“最小版本是2.6”。这允许使用CMake版本在OpenNN上运行CMake,该版本不支持所有使用的功能(通过OpenNN),这会导致此问题。
第二个解决方案(解决方案B)只是手动为编译器添加所需的“-std=c++11
”标志。