Mac OSX Yosemite下RcppGSL安装问题求助
解决Mac OSX Yosemite下RcppGSL的安装问题
作为资深R用户,第一次碰C++和Rcpp确实容易在依赖库上卡壳,我帮你梳理下Mac Yosemite上搞定RcppGSL的关键步骤:
第一步:先搞定系统级的GSL库安装
RcppGSL只是R和GSL之间的接口,必须先让系统有完整的GSL库。Yosemite版本比较老,官方Homebrew已经停止支持了,得换个适配的方式:
- 如果你之前装过Homebrew,先切换到支持旧系统的分支:
cd $(brew --repo) git checkout 2.2.0 # 这个版本是最后支持Yosemite的Homebrew稳定版 brew update - 接着安装GSL:
brew install gsl - 如果Homebrew这条路走不通,就手动编译GSL:
- 下载GSL 1.16版本的源码包(这个版本完美兼容Yosemite)
- 解压后打开终端进入源码目录,执行:
这样GSL会被安装到./configure --prefix=/usr/local make sudo make install/usr/local目录,R能自动识别这个标准路径。
第二步:在R中安装RcppGSL
安装前需要明确告诉R GSL的位置,直接在R控制台运行:
install.packages("RcppGSL", configure.args = "--with-gsl=/usr/local")
如果你手动把GSL装到了其他路径,把/usr/local换成你实际的安装目录即可。
第三步:测试极简示例
假设你的测试代码是调用GSL线性代数函数的类型,比如:
#include <RcppGSL.h> #include <gsl/gsl_linalg.h> // [[Rcpp::depends(RcppGSL)]] // [[Rcpp::export]] Rcpp::NumericVector solveLinear(Rcpp::NumericMatrix A, Rcpp::NumericVector b) { RcppGSL::Matrix gslA(A); RcppGSL::Vector gslB(b); gsl_linalg_HH_solve(gslA, gslB); return Rcpp::wrap(gslB); }
用sourceCpp()运行时如果报错找不到库,可以先在R里手动设置环境变量:
Sys.setenv(PKG_CFLAGS="-I/usr/local/include") Sys.setenv(PKG_LIBS="-L/usr/local/lib -lgsl -lgslcblas") sourceCpp("你的代码文件.cpp")
常见坑点排查
- 若编译时出现
ld: library not found for -lgsl,检查/usr/local/lib下是否有libgsl.dylib和libgslcblas.dylib文件,没有的话重新安装GSL;有的话确认configure.args里的路径是否正确。 - 确保你安装了Xcode 7.3.1(最后支持Yosemite的Xcode版本),并且执行过
xcode-select --install安装命令行工具,否则编译会因为缺少编译器环境失败。
内容的提问来源于stack exchange,提问作者IJK
相关产品推荐
相关产品推荐

