4

我正在尝试向 CRAN 提交一个在 Debian 的预测试过程中失败的包。

我使用了一些 C++ 代码,这些代码通过 Rcpp/RcppArmadillo(使用<nlopt.hpp>)连接到 nlopt 优化库。因此,我的包需要一个系统版本的 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’
4

2 回答 2

3

nlopt 的 C++ 接口已迁移到 Debian 中的单独软件包,参见https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=855600。所以看起来那个特定的 CRAN 机器使用了 Debian Testing 或 Stable + Backports 并且只有libnlopt-dev但没有libnlopt-cxx-dev安装。您必须联系 CRAN 维护人员来安装此依赖项。

顺便说一句,理想情况下,此类错误应该出现在configure脚本中,即您应该尝试编译一个需要nlopt.hpp.

于 2019-01-23T10:20:06.967 回答
3

你在 r-package-devel 上问了同样的问题,我没有给你很好的答案。

从本质上讲,您在一个所需的上游包中有很好的变化。这是非常微妙的。除了@Ralf 的建议,我想不出任何东西:测试它

或者,也许您只是未能将您的包裹要求传达给 CRAN。但这将是一个更简单的问题,并且当遇到错误的版本时,您肯定会安装失败。

所以总的来说,我的建议和以前一样:与 Jelmer 合作,并等待他发布更新nloptr版本。在那之前,所有的解决方案都注定是软糖,因为你无法控制nloptr你的包可能会遇到什么版本。

于 2019-01-23T11:47:52.720 回答