首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >警告:已禁用Armadillo中的C++11功能

警告:已禁用Armadillo中的C++11功能
EN

Stack Overflow用户
提问于 2016-01-22 13:51:32
回答 3查看 925关注 0票数 2

我在windows和cygwin下使用Armadillo。

尽管如此,Armadillo建议使用Mingw,Boost建议使用cygwin并避免使用mingw。因此,当我编译时,我会收到这样的警告。有没有办法在不破解Armadillo的源码的情况下修复这个警告?

警告在源代码中的位置是here

main.cpp

代码语言:javascript
运行
复制
#include <armadillo>

int main()
{
    arma::mat A(5,10);
    A.ones();
    return 0;
}

编译:

代码语言:javascript
运行
复制
g++ main.cpp -std=c++11

警告:

代码语言:javascript
运行
复制
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")

                                           ^
EN

回答 3

Stack Overflow用户

发布于 2017-02-22 06:47:31

它可能是最近添加到Armadillo中的,但下面的编译时标志似乎可以做到这一点:

代码语言:javascript
运行
复制
g++ main.cpp -std=c++11 -DARMA_DONT_PRINT_CXX11_WARNING
票数 2
EN

Stack Overflow用户

发布于 2016-01-22 16:28:32

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

最新的Cygwin包括GCC-5.2(以及Mingw @Cygwin),它们应该固有地支持最新的C++11功能。

最好的选择是删除代码块@compiler_Setup.hpp

代码语言:javascript
运行
复制
#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

代码语言:javascript
运行
复制
#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>后面的@RcppArmadilloForward.h中定义它

票数 1
EN

Stack Overflow用户

发布于 2016-01-22 15:24:04

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34939879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档