Ubuntu 18.04下RcppNumerical与RcppEigen出现警告问题求助
解决Ubuntu 18.04中RcppEigen/RcppNumerical的编译警告问题
我之前也碰到过一模一样的情况,这些长串警告本质是GCC编译器与Eigen库的模板属性处理逻辑不兼容导致的——虽然看着吓人,但完全不会影响代码的正常运行,只是控制台输出太繁琐而已。下面给你几个靠谱的解决办法:
方法1:在单个代码文件中临时抑制警告
如果只想针对当前Rcpp代码文件解决,可以用编译器的#pragma指令,只在包含RcppEigen/RcppNumerical头文件时忽略该警告,不影响其他代码的警告提示:
// [[Rcpp::plugins(cpp11)]] // [[Rcpp::depends(RcppEigen)]] // 保存当前警告状态,忽略指定警告 #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wignored-attributes" #include <RcppEigen.h> // 恢复之前的警告状态 #pragma GCC diagnostic pop // 你的Rcpp代码写在这里
如果是用RcppNumerical,只需要把<RcppEigen.h>换成<RcppNumerical.h>即可。
方法2:全局设置R的编译选项(永久解决)
要是不想每个文件都写一遍指令,可以修改R的全局编译配置,让所有Rcpp编译过程都自动忽略这个警告:
- 打开(或创建)R的配置文件
~/.R/Makevars - 在文件中添加以下内容:
CXXFLAGS += -Wno-ignored-attributes
- 保存文件后重启R,之后再编译相关代码就不会再看到这些警告了。
补充说明
这些警告是Ubuntu 18.04默认的GCC 7.x版本与Eigen模板特性的适配问题,即使你把RcppEigen/RcppNumerical更新到最新版本也会存在——毕竟系统编译器版本固定,而Eigen对新编译器的优化特性在老版本上会触发这类非致命警告。上面的两种方法都能完美解决这个问题,选哪种看你的使用场景就行。
内容的提问来源于stack exchange,提问作者Ari.stat
相关产品推荐
相关产品推荐

