我收到boost和Rcpp的致命错误

我收到boost和Rcpp的致命错误,r,eigen,rcpp,multiprecision,boost-multiprecision,R,Eigen,Rcpp,Multiprecision,Boost Multiprecision,如帖子所述: 我正在尝试在Windows的Rcpp中使用boost。简化文件为: // [[Rcpp::depends(BH)]] #include <Rcpp.h> #include <boost/multiprecision/float128.hpp> namespace mp = boost::multiprecision; // [[Rcpp::export]] std::string qexp(double da = -1500.0, double db =

如帖子所述:

我正在尝试在Windows的Rcpp中使用boost。简化文件为:

// [[Rcpp::depends(BH)]]
#include <Rcpp.h>
#include <boost/multiprecision/float128.hpp>

namespace mp = boost::multiprecision;

// [[Rcpp::export]]
std::string qexp(double da = -1500.0, double db = -1501.0)
{
  mp::float128 a(da), b(db);
  mp::float128 res = mp::exp(a) / (mp::exp(a) + mp::exp(b));
  return res.convert_to<std::string>();
}
我有一个编译问题。正如@duckmayer在那篇文章中所建议的,我尝试了:

Sys.setenvPKG_LIBS=-lquadmath

然后是Rcpp::sourceCpp'quadexp.cpp'


这样,编译运行时不会出错。但是,当我执行qexp时,我在RStudio中收到一条关于致命错误的消息,RStudio完全关闭。你知道会发生什么吗?我假设我的问题是由于某种配置造成的,因为@duckmayer可以毫无问题地运行相同的代码。为了避免这个严重的致命错误,我的配置应该考虑哪些部分?

除了上面的评论之外:

edd@rob:~/git/so-r/52933795$ cat code.cpp
// [[Rcpp::depends(BH)]]
#include <Rcpp.h>
#include <boost/multiprecision/float128.hpp>

namespace mp = boost::multiprecision;

// [[Rcpp::export]]
std::string qexp(double da = -1500.0, double db = -1501.0) {
    mp::float128 a(da), b(db);
    mp::float128 res = mp::exp(a) / (mp::exp(a) + mp::exp(b));
    return res.convert_to<std::string>();
}


/*** R
qexp()
*/
edd@rob:~/git/so-r/52933795$ Rscript -e 'Rcpp::sourceCpp("code.cpp")'

R> qexp()
[1] "0.731058578630004879251159241821836351"
edd@rob:~/git/so-r/52933795$

也就是说,完全使用您的代码加上添加的R调用,它就按原样工作。

1。他对Sys.setenv的建议是针对不同的操作系统,我甚至不需要他的建议。2.Boost和RStudio有时会发生冲突,主要是过度线程,我不确定这里的情况是否如此。3.上一点的逻辑结果是在RStudio之外的R中尝试代码。4.正如我在回答你之前的问题时所说的那样?问题,它只适用于我在Linux上使用标准CRAN包的情况。好的,我已经将gcc更新为8.1.0,现在RStudio不会崩溃,它提供了正确的输出。奇怪的是,Windows上的.R不使用gcc 8.1.0。你现在换平台了吗?但我怀疑您正在使用的某些编译器构建确实包含,而有些不包含。我模模糊糊地记得它是一个新东西,可能是g++4.*?我在stackoverflow中看到了一个答案,这个问题通过切换到gcc 6.1得到了解决。我在谷歌上搜索过,我找到了一种在Rtools中安装gcc 8.1而不是4.1的方法。现在它工作了!没有其他变化。@anarcocapitalisasocialdemocr可能与: