【发布时间】:2018-03-11 22:07:37
【问题描述】:
我正在构建一个包,它为来自SUNDIALS ODE 求解 C 库的 cvode 求解器提供了一个包装器。
到目前为止,我已经能够通过提供源 C 文件(从 RcppCAF 包中的 Makevars 获得灵感)并动态制作静态库并链接,在我的 OS X 机器上编译包反对。 Makevars 文件可以在下面的链接中找到
https://github.com/sn248/Rcppsbmod/blob/master/src/Makevars
之前我链接到系统上的静态库,但现在因为我在编译包时动态创建静态库 (libsundials_all.a),我相信没有在他们的系统上安装 SUNDIALS 的用户(在至少OS X) 也应该能够使用这个包(我的想法是正确的吗?)。我已经检查过以这种方式编译的包是否能够集成测试 ODE。此外,当我运行 R CMD check(在 RStudio 上使用 Check 选项,使用 --as-cran 选项)时,我得到了成功,即
R CMD check results
0 errors | 0 warnings | 0 notes
但是,我希望 Windows 上的用户能够使用这个软件包,即使他们的机器上没有安装 SUNDIALS,我的问题是
- 可以这样做还是 Windows 用户需要安装 SUNDIALS?
-
目前我的
Makevars.win与Makevars相同,所以当我在R WinBuilder 上提交我的包时,我收到以下消息(告诉我make无法找到ar)。make: ar: Command not foundmake: *** [../inst/libsundials_all.a] Error 127Warning: running command 'make -f "Makevars.win" -f "D:/RCompile/recent/R-3.4.3/etc/i386/Makeconf" -f "D:/RCompile/recent/R-3.4.3/etc/i386/Makevars.site" -f "D:/RCompile/recent/R-3.4.3/share/make/winshlib.mk" SHLIB_LDFLAGS='$(SHLIB_CXXLDFLAGS)' SHLIB_LD='$(SHLIB_CXXLD)' SHLIB="Rcppsbmod.dll" ' had status 2ERROR: compilation failed for package 'Rcppsbmod'* removing 'd:/RCompile/CRANguest/R-release/lib/Rcppsbmod'In R CMD INSTALL
一些搜索显示RTools 可能没有ar,here,但我认为我不清楚在 Windows 上编译这个包应该做什么。我查看了一些Makevars.win 文件,但大多数都与Makevars 相似。我觉得我需要制作一个.dll(类似于libsundials_all.a,但我完全不知道该怎么做。
任何关于如何在 Windows 上编译此软件包的建议将不胜感激!
另外,出于好奇,我经常会找到这样的代码(例如,在 Makevars.in 的 rcppgsl 中)
GSL_LIBS = @GSL_LIBS@
我不确定@GSL_LIBS@ 是什么意思,make 教程也没有这种语法。对此代码的任何解释都将非常有帮助。
谢谢!
【问题讨论】:
-
试试this post。这是一个 CRAN-Windows 约定。
-
谢谢德克。我会看看你提到的链接。
-
抱歉,使用 环境变量
GSL_LIBS是 windows 的惯例。使用@GSL_LIBS指定autoconf,即该值将由configure脚本填充(在Linux、Unix、macOS 上...)。我也在几个地方解释过;你可以只关注 RcppGSL 包,或者更简单的,使用 RcppGSL 的其他包——例如我的小 RcppZiggurat。