c++ - 在 R 中安装“RcppArmadillo”包时出错
问题描述
我正在使用 macOS High Sierra 版本 10.13.4。在安装“RcppArmadillo”包时,我收到以下两条警告消息:
checking whether /usr/local/clang6/bin/clang++ -Wall accepts -g... (cached) yes
checking whether g++ version is sufficient... almost
configure: WARNING: Compiler self-identifies as being compliant with GNUC extensions but is not g++.
checking for macOS... found
checking for macOS Apple compiler... not found
checking for clang compiler... found
checking for OpenMP compatible version of clang... found and suitable
checking LAPACK_LIBS... R-supplied partial LAPACK found
configure: WARNING: Some complex-valued LAPACK functions may not be available
当我在终端上输入“gcc --version”时,我得到
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 9.1.0 (clang-902.0.39.2)
Target: x86_64-apple-darwin17.5.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
我在 R 中的 Makevars 文件看起来像:
FLIBS=-L/usr/local/gfortran/lib/gcc/x86_64-apple-darwin16/6.3.0 -L/usr/local/gfortran/lib -lgfortran -lquadmath -lm
F77 = /usr/local/bin/gfortran
FC = $F77
CXX = /usr/local/clang6/bin/clang++ -Wall
LDFLAGS=-L/usr/local/clang6/lib
CC= /usr/local/clang6/bin/clang
SHLIB_CXXLD=ccache /usr/local/clang6/bin/clang++
CXX11 = /usr/local/clang6/bin/clang++
CXX98 = /usr/local/clang6/bin/clang++
CXX14 = /usr/local/clang6/bin/clang++
如何删除这两个警告标志?
解决方案
简而言之,这些是警告而不是错误。此外,这些警告无关紧要。
让我们谈谈每个警告的含义......
第一次警告
配置:警告:编译器自识别为与 GNUC 扩展兼容,但不是 g++。
这说明Makevars
文件CXX
变量中定义的编译器被识别为但gcc
不是编译gcc
器。本质上,每个编译器都有自己的预定义头文件,请参阅第 3.7.2 节C 预处理器的通用预定义宏,此检查的重点是验证gcc
是否选择了现代编译器。但是,如果编译器谎报自己是谁,则很难检查编译器是否存在。
有关来源的详细信息,请参阅问题Add a check message success in config after g++version check #183和 commit the default message on the g++ test 中的讨论)。
第二次警告
配置:警告:某些复值 LAPACK 函数可能不可用
在此警告中,有人抱怨底层的线性代数包与R附带的相同。不幸的是, R附带的 LAPACK受到严重限制并且有点过时。因此,这里的检查是希望通过 OpenBLAS、Intel MKL 或 ATLAS 存在外部LAPACK。由于此检查的结构方式,除非您从源代码编译R——也就是说,您选择不使用 CRAN 提供的二进制文件——否则无法避免打嗝。
简而言之,CRAN 二进制文件在特定位置查找 LAPACK。切换到另一个 LAPACK 需要建立到现有 lRlapack 位置的符号链接,这是检查搜索的内容。但是,不建议做这样的符号链接。(对不起 vecLib 爱好者!)
如果您对从源代码编译感兴趣,请考虑查看R 安装和管理的第 A.3 节线性代数,其中描述了使用外部 LAPACK 的过程。
推荐阅读
- reactjs - MERN堆栈将图像保存在服务器上并将路径保存在mongoDB中
- microsoft-graph-api - OneDrive 报告 - getOneDriveUsageAccountDetail 不适用于期间参数,但适用于日期参数
- jquery - 语法错误,无法识别的表达式:input['type=radio']:checked in jQuery 1.12.4 from 1.7.1js
- xcode - Xcode Build 构建错误:sh:错误解释器:权限被拒绝
- fortran - Notepad++ 中 Fortran 固定源代码格式的奇怪语法高亮显示
- javascript - OPENING 常量 新标签
- css - 减少两个 td 元素之间的空间
- c# - 使用进度条在 WPF C# MVVM 中上传文件
- eloquent - 在 PHP Lighthouse GraphQL 中过滤方法的返回值
- javascript - 当 useRef 元素的高度大于零时的事件