libstableR没有';t为macOS构建

libstableR没有';t为macOS构建,r,R,我想在mac上使用R包libstableR。我不是该软件包的撰稿人/作者,并已就以下事项与他们联系: 在联系了说问题可能与R不知道GSL在计算机上的位置有关的作者后,我提出了申请,并要求mac用户执行以下操作: 一定要有 一定要有 确保在R中有Rcpp和:justinstall.packages(“RcppGSL”) 资料来源: 应用上述步骤已更改了的输出 devtools::install_github("swihart/libstableR") 发件人: 基本上,这些错误不是抱怨\u

我想在mac上使用R包libstableR。我不是该软件包的撰稿人/作者,并已就以下事项与他们联系:

在联系了说问题可能与R不知道GSL在计算机上的位置有关的作者后,我提出了申请,并要求mac用户执行以下操作:

  • 一定要有

  • 一定要有

  • 确保在R中有Rcpp和:just
    install.packages(“RcppGSL”)

  • 资料来源:

    应用上述步骤已更改了的输出

    devtools::install_github("swihart/libstableR")
    
    发件人:

    基本上,这些错误不是抱怨
    \u stable\u set\u THREADS
    而是与
    \u libstableR\u stable\u cdf
    有关
    libstableR\u stable\u cdf
    是一个导出函数。应用Roxygen/Rcpp时,
    \u libstableR\u stable\u cdf
    中的前导下划线放在那里

    我花了大约两个月的时间在网上进行修补和搜索,试图让这个程序启动并运行,现在我来寻求帮助

    无论如何,要让libstableR在mac上工作?

    所以,我去拿了(我知道Bruce有回购协议,但我想看看原件)

    我已经安装了
    gsl
    (自制)和
    RcppGSL

    我做了一个快速的
    devtools::document()
    ,因为我发现它在任何地方都使用Rcpp,并且得到:

    Error in dyn.load(dllfile) :
      unable to load shared object '/private/tmp/libstableR/src/libstableR.so':
      dlopen(/private/tmp/libstableR/src/libstableR.so, 6): Symbol not found: _libstableR_stable_cdf
      Referenced from: /private/tmp/libstableR/src/libstableR.so
      Expected in: flat namespace
     in /private/tmp/libstableR/src/libstableR.so
    
    对于
    stable\u cdf()
    有两个定义(一个Rcpp公开,一个内部),因此我对内部定义
    int\u stable\u cdf()
    进行了修改,并对其进行了单数调用

    我仍然有一个类似的错误,所以我怀疑他们手工制作了一些东西

    我进入并根据roxygen注释自动生成名称空间,并为关键公开函数添加了
    /'@export
    s

    从Rcpp auto gen的注册码现在起,我删除了
    init.c

    我仍然得到一个错误,但这次是因为
    stable\u set\u线程
    不可用

    事实证明他们根本不在乎macOS的人:

    #ifdef __WIN32
    void stable_set_THREADS(unsigned int value) {
    /*
      SYSTEM_INFO sysinfo;
      GetSystemInfo(&sysinfo);
      THREADS = (unsigned int)sysinfo.dwNumberOfProcessors;
      */
    
      THREADS = 12;
    }
    #else
    #ifdef __unix
    void stable_set_THREADS(unsigned int value) {
      if (value == 0) THREADS = sysconf(_SC_NPROCESSORS_ONLN);
      else THREADS = value;
      //printf("\nCPUs = %u\n",THREADS);
    }
    #endif
    #endif
    
    我删除了
    unix
    ifdef
    ,调整了一些附带的东西,它就工作了


    我将看看我们是否能在GH上实现这一点,并让维护人员确定一些进一步的调整,以使其他人更容易做出贡献。

    嘿,布鲁斯。看看是否适合你。我可以在本周晚些时候和它聊天。很有效!如果你想要一些互联网点数,请回答。;-)我已经深深地感谢你了!如果您联系维护人员,请随时抄送我。lemme将发布更多“我做了什么来修复”类型的答案。这可能对其他人有帮助。
    Error in dyn.load(dllfile) :
      unable to load shared object '/private/tmp/libstableR/src/libstableR.so':
      dlopen(/private/tmp/libstableR/src/libstableR.so, 6): Symbol not found: _libstableR_stable_cdf
      Referenced from: /private/tmp/libstableR/src/libstableR.so
      Expected in: flat namespace
     in /private/tmp/libstableR/src/libstableR.so
    
    #ifdef __WIN32
    void stable_set_THREADS(unsigned int value) {
    /*
      SYSTEM_INFO sysinfo;
      GetSystemInfo(&sysinfo);
      THREADS = (unsigned int)sysinfo.dwNumberOfProcessors;
      */
    
      THREADS = 12;
    }
    #else
    #ifdef __unix
    void stable_set_THREADS(unsigned int value) {
      if (value == 0) THREADS = sysconf(_SC_NPROCESSORS_ONLN);
      else THREADS = value;
      //printf("\nCPUs = %u\n",THREADS);
    }
    #endif
    #endif