带有 Rcpp 的 R Cran 包构建在除 Solaris 之外的每个系统上
R Cran package with Rcpp builds on every system but Solaris
我正在研究一个提交给 CRAN 的 R 库,它可以在除 Solaris 以外的所有平台上编译。
感谢 The R-hub builder 网站,我能够在该系统上遇到两种不同类型的错误(否则我无法访问任何 Solaris 计算机)。
但是,我不知道我得到的错误。此外,两个编译器的行为完全不同:
使用选项:“Oracle Solaris 10,x86,32 位,R-release”,我的代码可以编译,但在运行时崩溃并出现“段错误”。
使用选项:“Oracle Solaris 10,x86,32 位,R-release,Oracle Developer Studio 12.6”,代码甚至无法编译,得到一个奇怪的错误:
"rcpp_module.cpp", line 340: Error: The name function is ambiguous, void Rcpp::function<RESULT_TYPE>(const char*, RESULT_TYPE()(), const char) and std::function<_Signature>.
由于包编译(零警告)并在 Windows、Ubuntu、CentOs、Mac OS X 上执行,但我不知道是什么我应该寻找尽可能多的错误吗?
有没有其他人遇到同样的问题?你有什么提示吗?
感谢您的支持。
更新于 2021 年 4 月 30 日:我已经制定了一个最小的示例来重现系统 Oracle Solaris 10、x86 的 R-hub 构建器上的错误, 32 位,R 版本,Oracle Developer Studio 12.6。结果可用 here.
在 rcpp_module.cpp 文件中我们有:
#include <Rcpp.h>
#include "KWD_Histogram2D.h"
Rcpp::List compareAll(Rcpp::NumericMatrix Coordinates, // This is line 49
Rcpp::NumericMatrix Weights, int L = 3,
bool recode = true, const std::string& method = "approx",
const std::string& algorithm = "colgen",
const std::string& model = "mincostflow",
const std::string& verbosity = "silent",
double timelimit = 14400, double opt_tolerance = 1e-06,
bool unbalanced = false, double unbal_cost = 1e+09,
bool convex = true) {
Rcpp::List sol;
return sol;
}
RCPP_MODULE(SKWD) {
using namespace Rcpp;
function("compareAll", &compareAll,
List::create(_["Coordinates"], _["Weights"], _["L"] = 3,
_["recode"] = true, _["method"] = "approx",
_["algorithm"] = "colgen", _["model"] = "mincostflow",
_["verbosity"] = "silent", _["timelimit"] = 14400,
_["opt_tolerance"] = 1e-06, _["unbalanced"] = false,
_["unbal_cost"] = 1e+09, _["convex"] = true),
"compare all histograms using the given search options");
}
包含的文件KWD_Histogram2D.h基本上是空的。
R-hub输出的错误如下:
"rcpp_module.cpp", line 49: Error: The name function is ambiguous, void Rcpp::function<RESULT_TYPE>(const char*, RESULT_TYPE(*)(), const char*) and std::function<_Signature>.
1 Error(s) detected.
更新于 02.05.2021:重新运行 命令 Rcpp::compileAttributes()
重写文件 RcppExports.cpp
和RcppExports.R
。然而,即使是带有 Student class 的基本 Rcpp 教程示例也无法在带有 Oracle Developer Studio 12.6 的 Solaris 上运行。现在错误类似于以下错误:
Error: package or namespace load failed for ‘RcppStudent’ in .doLoadActions(where, attach): error in load action .__A__.1 for package RcppStudent: loadModule(module = "RcppStudentEx", what = TRUE, env = ns, loadNow = TRUE): Unable to load module "RcppStudentEx": negative length vectors are not allowed Error: loading failed Execution halted
我刚刚在 rcpp-modules-student 上报告了这个问题。
更新于 03.05.2021:我的 C++ 代码使用通过 OpenCSW 安装的 gcc-5.5 在 Solaris 11 下(通过 VirtuloBox)编译并正确运行。因此,该错误位于我编写的 Rcpp 包装器和 Solaris 下的 R 系统 运行 之间。
更新于 07.05.2021:我已经在下面回答了我自己的问题。
在第 335-340 行 Github 的代码中
.method("num_arcs", &KWD::Solver::num_arcs,
"get the number of arcs in the Network model")
.method("num_nodes", &KWD::Solver::num_nodes,
"get the number of arcs in the Network model")
应该不是第二个节点吧?
.method("num_nodes", &KWD::Solver::num_nodes,
"get the number of nodes in the Network model")
重现 CRAN 自动构建系统上发生的问题的唯一方法是使用 https://files.r-hub.io/solaris/ and updating the version of R following the instructions described in the solarischeck GitHub 存储库中可用的映像在 VirtualBox 中本地安装 Solaris 10。
最后,错误出在我的代码中,因为浮点数之间的危险逻辑表达式导致无限递归调用,因此出现溢出C 堆栈的。
Solaris 纯属偶然提出了这个问题。
我正在研究一个提交给 CRAN 的 R 库,它可以在除 Solaris 以外的所有平台上编译。 感谢 The R-hub builder 网站,我能够在该系统上遇到两种不同类型的错误(否则我无法访问任何 Solaris 计算机)。
但是,我不知道我得到的错误。此外,两个编译器的行为完全不同:
使用选项:“Oracle Solaris 10,x86,32 位,R-release”,我的代码可以编译,但在运行时崩溃并出现“段错误”。
使用选项:“Oracle Solaris 10,x86,32 位,R-release,Oracle Developer Studio 12.6”,代码甚至无法编译,得到一个奇怪的错误:
"rcpp_module.cpp", line 340: Error: The name function is ambiguous, void Rcpp::function<RESULT_TYPE>(const char*, RESULT_TYPE()(), const char) and std::function<_Signature>.
由于包编译(零警告)并在 Windows、Ubuntu、CentOs、Mac OS X 上执行,但我不知道是什么我应该寻找尽可能多的错误吗?
有没有其他人遇到同样的问题?你有什么提示吗?
感谢您的支持。
更新于 2021 年 4 月 30 日:我已经制定了一个最小的示例来重现系统 Oracle Solaris 10、x86 的 R-hub 构建器上的错误, 32 位,R 版本,Oracle Developer Studio 12.6。结果可用 here.
在 rcpp_module.cpp 文件中我们有:
#include <Rcpp.h>
#include "KWD_Histogram2D.h"
Rcpp::List compareAll(Rcpp::NumericMatrix Coordinates, // This is line 49
Rcpp::NumericMatrix Weights, int L = 3,
bool recode = true, const std::string& method = "approx",
const std::string& algorithm = "colgen",
const std::string& model = "mincostflow",
const std::string& verbosity = "silent",
double timelimit = 14400, double opt_tolerance = 1e-06,
bool unbalanced = false, double unbal_cost = 1e+09,
bool convex = true) {
Rcpp::List sol;
return sol;
}
RCPP_MODULE(SKWD) {
using namespace Rcpp;
function("compareAll", &compareAll,
List::create(_["Coordinates"], _["Weights"], _["L"] = 3,
_["recode"] = true, _["method"] = "approx",
_["algorithm"] = "colgen", _["model"] = "mincostflow",
_["verbosity"] = "silent", _["timelimit"] = 14400,
_["opt_tolerance"] = 1e-06, _["unbalanced"] = false,
_["unbal_cost"] = 1e+09, _["convex"] = true),
"compare all histograms using the given search options");
}
包含的文件KWD_Histogram2D.h基本上是空的。 R-hub输出的错误如下:
"rcpp_module.cpp", line 49: Error: The name function is ambiguous, void Rcpp::function<RESULT_TYPE>(const char*, RESULT_TYPE(*)(), const char*) and std::function<_Signature>.
1 Error(s) detected.
更新于 02.05.2021:重新运行 命令 Rcpp::compileAttributes()
重写文件 RcppExports.cpp
和RcppExports.R
。然而,即使是带有 Student class 的基本 Rcpp 教程示例也无法在带有 Oracle Developer Studio 12.6 的 Solaris 上运行。现在错误类似于以下错误:
Error: package or namespace load failed for ‘RcppStudent’ in .doLoadActions(where, attach): error in load action .__A__.1 for package RcppStudent: loadModule(module = "RcppStudentEx", what = TRUE, env = ns, loadNow = TRUE): Unable to load module "RcppStudentEx": negative length vectors are not allowed Error: loading failed Execution halted
我刚刚在 rcpp-modules-student 上报告了这个问题。
更新于 03.05.2021:我的 C++ 代码使用通过 OpenCSW 安装的 gcc-5.5 在 Solaris 11 下(通过 VirtuloBox)编译并正确运行。因此,该错误位于我编写的 Rcpp 包装器和 Solaris 下的 R 系统 运行 之间。
更新于 07.05.2021:我已经在下面回答了我自己的问题。
在第 335-340 行 Github 的代码中
.method("num_arcs", &KWD::Solver::num_arcs,
"get the number of arcs in the Network model")
.method("num_nodes", &KWD::Solver::num_nodes,
"get the number of arcs in the Network model")
应该不是第二个节点吧?
.method("num_nodes", &KWD::Solver::num_nodes,
"get the number of nodes in the Network model")
重现 CRAN 自动构建系统上发生的问题的唯一方法是使用 https://files.r-hub.io/solaris/ and updating the version of R following the instructions described in the solarischeck GitHub 存储库中可用的映像在 VirtualBox 中本地安装 Solaris 10。
最后,错误出在我的代码中,因为浮点数之间的危险逻辑表达式导致无限递归调用,因此出现溢出C 堆栈的。
Solaris 纯属偶然提出了这个问题。