编译任何代码: `Error in dyn.load(context$dynlibPath): unable to load shared object ' . ..sourceCpp_96369.so时的Rcpp错误信息'`

标签 r rcpp

当我尝试编译任何代码时,我收到以下错误消息。下面是一个示例和 sessionInfo() 的输出。该示例曾经有效,但我在使用 RcppArmadillo 时遇到了问题。所以我安装了 for HPC 版本的 gfortran 编译器,这是一个错误。当我尝试编译某些东西时,R 崩溃了(CRAN 还警告 HPC 版本)。最后我安装了CRAN上的版本here但现在对 cppFunctionsourceCpp 的任何调用都会产生以下错误。我已经尝试卸载 gfortran、R、Rcpp 并重新安装它们。同样的错误。 gfortran -v 的输出有点困惑。有什么想法吗?

示例代码

require("Rcpp")
cppFunction('
    int add(int x, int y, int z) { 
      int sum = x + y + z;
      return sum;
    }'
)

错误信息

Error in dyn.load(context$dynlibPath) : 
  unable to load shared object '/var/folders/cc/_mskgpdd6f77hrg4rsp4zq1h0000gq/T//RtmpHRb5JV/sourcecpp_24fb5226c6fc/sourceCpp_96369.so':
  dlopen(/var/folders/cc/_mskgpdd6f77hrg4rsp4zq1h0000gq/T//RtmpHRb5JV/sourcecpp_24fb5226c6fc/sourceCpp_96369.so, 6): Symbol not found: ___emutls_get_address
  Referenced from: /usr/local/lib/libstdc++.6.dylib
  Expected in: /usr/local/lib/libgcc_s.1.dylib
 in /usr/local/lib/libstdc++.6.dylib

session 信息的输出

R version 2.15.2 (2012-10-26)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] Rcpp_0.10.1      boot_1.3-7       xtable_1.7-0     stringr_0.6.1   
[5] mi_0.09-18       arm_1.5-08       abind_1.4-0      R2WinBUGS_2.1-18
[9] coda_0.14-7      lme4_0.999999-0  Matrix_1.0-9     lattice_0.20-10 
[13] car_2.0-15       nnet_7.3-5       MASS_7.3-22      plyr_1.7.1      
[17] foreign_0.8-51  

loaded via a namespace (and not attached):
[1] grid_2.15.2   nlme_3.1-105  stats4_2.15.2 tools_2.15.2 

编译器版本

> gcc -v
gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)
> gfortran -v
Using built-in specs.
Target: i686-apple-darwin8
Configured with: /Builds/unix/gcc/gcc-4.2/configure --prefix=/usr/local --mandir=/share/man --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --build=i686-apple-darwin8 --host=i686-apple-darwin8 --target=i686-apple-darwin8 --enable-languages=fortran
Thread model: posix
gcc version 4.2.3

最佳答案

不知何故,我最终在 /usr/local/lib 中得到了一个 libstdc++.6.dylib 版本。当我使用 Rcpp 或内联编译某些代码并产生错误时,会选择此版本。它似乎覆盖了/usr/lib 中的系统版本。现在,我只是将 /usr/local/lib/libstdc++.6.dylib 重命名为 .../libstdc++.6-SAVE。我不确定这是否会产生其他问题,但 Rcpp 再次运行并且 ?cfunction 示例也有效!

编辑:实际上还是搞砸了。以下是解决当前 R session 问题的步骤。 1) 以 /usr/local/lib/libstdc++.6.dylib 不变启动 R,2) 重命名 /usr/local/lib/libstdc++.6.dylib,3 ) 愉快地使用 Rcpp。然而,当我现在重新启动 R 时,我仍然收到旧的错误消息。我必须再次执行这三个步骤才能使其在当前 R session 中工作。

关于编译任何代码: `Error in dyn.load(context$dynlibPath): unable to load shared object ' . ..sourceCpp_96369.so时的Rcpp错误信息'`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13696286/

相关文章:

r - 如何计算每个类别中的非零值

c++ - 在 rcpp 中使用 StringMatrix 或 CharacterMatrix 对象时如何使用子字符串?

r - 附加到 Rcpp 列表中的元素

c++ - 无法将 'SEXP' 转换为 'Rcpp::traits::input_parameter<double>

r - MS Word 轨道更改和 RMarkDown

r - 如果列包含特定值,则将列名称指定为单元格值

r - 如何生成向量的所有可能组合

R:关于优化的问题 - 优化中的函数值无效

r - R中cpp的编译错误

c++ - 无法使用文件中的 sourceCpp