我在windows和cygwin下使用Armadillo。
尽管如此,犰狳建议Mingw,Boost建议使用cygwin并避免使用mingw。所以,当我编译时,我会收到这样的警告。无论如何在没有破坏犰狳的诅咒代码的情况下修复此警告?
源代码中的警告位置为here。
的main.cpp
#include <armadillo>
int main()
{
arma::mat A(5,10);
A.ones();
return 0;
}
编译:
g++ main.cpp -std=c++11
警告:
E:\test\temp>make
g++ main.cpp -std=c++11 -fdiagnostics-color=always
In file included from /usr/include/armadillo:50:0,
from main.cpp:1:
/usr/include/armadillo_bits/compiler_setup.hpp:72:123: note: #pragma message: WA
RNING: disabled use of C++11 features in Armadillo, due to incomplete support fo
r C++11 by Cygwin
#pragma message ("WARNING: disabled use of C++11 features in Armadillo, due
to incomplete support for C++11 by Cygwin")
^
答案 0 :(得分:2)
这可能是Armadillo的最新成员,但下面的编译时标志似乎可以解决这个问题:
g++ main.cpp -std=c++11 -DARMA_DONT_PRINT_CXX11_WARNING
答案 1 :(得分:1)
我没有使用犰狳编程。但从Armadillo源代码@ https://github.com/conradsnicta/armadillo-code/来看,似乎对于所有版本的Armadillo(6.1-6.5),Cygwin都禁用了C ++ 11。
最新 Cygwin 包括 GCC-5.2 和 Cygwin-Gcc-4.9.2 (以及Mingw @Cygwin)应该,恕我直言,本质上支持最新的C ++ 11功能。
您最好的选择是删除代码块@ compiler_Setup.hpp
#if defined(__CYGWIN__)
#if defined(ARMA_USE_CXX11)
#undef ARMA_USE_CXX11
#undef ARMA_USE_EXTERN_CXX11_RNG
#pragma message ("WARNING: disabled use of C++11 features in Armadillo, due to incomplete support for C++11 by Cygwin")
#endif
#endif
如果这不是一个选项,则必须重新定义ARMA_USE_CXX11
和ARMA_USE_EXTERN_CXX11_RNG
。
#if defined(__GNUC__)
#if (__GNUC__ > 4 || (__GNUC__ == 4 && (__GNUC_MINOR__ > 8)))
#define ARMA_USE_CXX11
#define ARMA_USE_EXTERN_CXX11_RNG
#endif
#endif
您可以在代码#include <armadillo>
答案 2 :(得分:0)
Armadillo库借助Cygwin编译器中的预定义宏识别您的编译器名称。在包含库之前,您可以在代码中#undef
__CYGWIN__
宏。如果未定义编译器宏,则可能存在问题,因为在针对每个编译器可用的最佳性能技巧的高性能代码中,此宏可能是必需的