我正在尝试将包提交给CRAN,该包在预测试期间失败了 在Debian上进行处理。
我使用一些与nlopt优化接口的C ++代码
Rcpp / RcppArmadillo的库(使用<nlopt.hpp>
)。因此,我的软件包需要nlopt的系统版本,可以通过deb软件包libnlopt-dev安装(我将其添加到SystemRequirements字段中)。
我使用配置脚本和pkg-config检索(希望) 适当的编译器标志,然后将其发送到src / Makevars
NLOPT_LIBS=`pkg-config --libs ${PKG_CONFIG_NAME}`
NLOPT_FLAG=`pkg-config --cflags ${PKG_CONFIG_NAME}`
此方法适用于我的系统(Ubuntu 18.04,R 3.5.2)和Travis (Linux和Mac OS),但在Debian CRAN服务器上失败: https://win-builder.r-project.org/incoming_pretest/PLNmodels_0.7_20190119_161032/Debian/00install.out
我添加了一些详细信息来检查标志是否正确导出
在CRAN服务器上,它们对我来说似乎还不错:至少,
在系统上找到了nlopt(请参见下面的NLOPT_LIBS=-lnlopt -lm
)。
但是,<nlopt.hpp>
在后面找不到...
任何帮助将不胜感激。感谢您抽出宝贵的时间阅读这篇文章。
* installing *source* package ‘PLNmodels’ ...
Using NLOPT_LIBS=-lnlopt -lm
Using NLOPT_FLAG=
** libs
g++-8 -std=gnu++11 -I"/home/hornik/tmp/R/include" -DNDEBUG -fopenmp
-I"/home/hornik/lib/R/Library/3.6/x86_64-linux-gnu/Rcpp/include"
-I"/home/hornik/lib/R/Library/3.6/x86_64-linux-gnu/RcppArmadillo/include"
-I/usr/local/include -fopenmp -fpic -g -O2 -Wall -pedantic
-mtune=native -c RcppExports.cpp -o RcppExports.o
g++-8 -std=gnu++11 -I"/home/hornik/tmp/R/include" -DNDEBUG -fopenmp
-I"/home/hornik/lib/R/Library/3.6/x86_64-linux-gnu/Rcpp/include"
-I"/home/hornik/lib/R/Library/3.6/x86_64-linux-gnu/RcppArmadillo/include"
-I/usr/local/include -fopenmp -fpic -g -O2 -Wall -pedantic
-mtune=native -c call_nlopt_PLN_VE.cpp -o call_nlopt_PLN_VE.o
In file included from call_nlopt_PLN_VE.cpp:6:
utils.h:5:10: fatal error: nlopt.hpp: No such file or directory
#include <nlopt.hpp>
^~~~~~~~~~~
compilation terminated.
make: *** [/home/hornik/tmp/R/etc/Makeconf:173: call_nlopt_PLN_VE.o] Error 1
ERROR: compilation failed for package ‘PLNmodels’
* removing ‘/srv/hornik/tmp/CRAN/PLNmodels.Rcheck/PLNmodels’
答案 0 :(得分:3)
nlopt的C ++接口已迁移到Debian c.f中的单独软件包。 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=855600。因此,看起来特定的CRAN机器使用了Debian Testing或Stable + Backports,并且仅安装了libnlopt-dev
而没有安装libnlopt-cxx-dev
。您必须与CRAN维护人员联系以安装此依赖项。
顺便说一句,理想情况下应在configure
脚本中避免此类错误,即,您应尝试编译一个需要nlopt.hpp
的简单程序。
答案 1 :(得分:3)
您问了同样的问题here on r-package-devel,但我对您没有好的答案。
从本质上讲,您需要在一个必需的上游软件包中进行细微改动。那非常微妙。除了@Ralf的建议,我什么都没想到:测试。
或者您可能只是无法将软件包的要求传达给CRAN。但这将是一个更简单的问题,当遇到错误的版本时,您注定会失败。
总的来说,我的建议与之前相同:与Jelmer合作,然后等待他发布更新的nloptr
版本。在此之前,所有解决方案肯定都是软糖,因为您无法控制您的软件包可能遇到的nloptr
版本。。