警告:禁用犰狳中的 C++11 功能

WARNING: disabled use of C++11 features in Armadillo

本文关键字:C++11 功能 警告      更新时间:2023-10-16

我在Windows和cygwin下使用犰狳。

尽管犰狳建议使用Mingw,Boost建议使用Mingw,但Boost建议使用Mingw。所以,当我编译时,我收到了这样的警告。有没有办法在不破解犰狳代码的情况下修复此警告?

源代码中的警告位置在这里。

主.cpp

#include <armadillo>
int main()
{
    arma::mat A(5,10);
    A.ones();
    return 0;
}

编译:

g++ main.cpp -std=c++11

警告:

E:testtemp>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")
                                           ^

它可能是犰狳最近添加的,但以下编译时标志似乎可以解决问题:

g++ main.cpp -std=c++11 -DARMA_DONT_PRINT_CXX11_WARNING

我没有使用犰狳编程。但从犰狳源代码@https://github.com/conradsnicta/armadillo-code/来看,似乎对于所有版本的犰狳(6.1-6.5),C++11 对 Cygwin 都是禁用的。

最新的Cygwin

包括GCC-5.2Cygwin-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_CXX11ARMA_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>后at@RcppArmadilloForward.h 定义它

犰狳库借助Cygwin编译器中的预定义宏来识别编译器名称。在包含库之前,可以在代码中#undef __CYGWIN__宏。如果未定义编译器宏,则可能会出现问题,因为在旨在使用每个编译器可用的最佳性能技巧的高性能代码中,此宏可能是必需