R中cpp的编译错误

时间:2013-12-23 21:06:28

标签: r clang rcpp

我最近“升级”到XCode 5.2,现在许多R包都无法使用。我有一个15“MBP运行OSX Mavericks 10.9.1并运行R 3.0.2。

首先,包diversitree中的mcmc函数崩溃并出现以下错误:

Error in .External(list(name = "CppMethod__invoke_notvoid", address = <pointer: 0x0>,  : 
  NULL value passed as symbol address

此外,我无法从源代码编译包“geomorph”,我收到以下错误:

clang: error: no such file or directory: 'SHLIB_LIBADD'
clang: error: no such file or directory: '='
make: *** [geomorph.so] Error 1
ERROR: compilation failed for package ‘geomorph’

所以我认为错误在编译器中的某个地方。我测试了这个想法:

> require(Rcpp)
> evalCpp("1+1")
clang++ -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG  -I/usr/local/include  -I"/Users/Chris/Library/R/3.0/library/Rcpp/include"    -fPIC  "-mtune=native -g -O2 -Wall -pedantic -Wconversion" -c file177c642d0b53.cpp -o file177c642d0b53.o clang++ -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/usr/local/lib -L/usr/local/lib -o sourceCpp_1783.so file177c642d0b53.o /Users/Chris/Library/R/3.0/library/Rcpp/lib/libRcpp.a SHLIB_LIBADD = -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation 
Error in sourceCpp(code = code, env = env, rebuild = rebuild, showOutput = showOutput,  : 
  Error 1 occurred building shared library.

WARNING: The tools required to build C++ code for R were not found.

Please install Command Line Tools for XCode (or equivalent).

clang: error: no such file or directory: 'SHLIB_LIBADD'
clang: error: no such file or directory: '='
make: *** [sourceCpp_1783.so] Error 1

还有:

has_devel()
'/Library/Frameworks/R.framework/Resources/bin/R' --vanilla  \
  CMD SHLIB foo.c 

clang -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG  -I/usr/local/include    -fPIC  "-mtune=native -g -O2 -Wall -pedantic -Wconversion" -c foo.c -o foo.o
clang -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/usr/local/lib -L/usr/local/lib -o foo.so foo.o SHLIB_LIBADD = -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation
clang: error: no such file or directory: 'SHLIB_LIBADD'
Error: Command failed (1)
clang: error: no such file or directory: '='
make: *** [foo.so] Error 1

我尝试从源代码重新安装Rcpp,但也失败了:

clang: error: no such file or directory: 'SHLIB_LIBADD'
clang: error: no such file or directory: '='
make: *** [Rcpp.so] Error 1

我花了几个小时试图对此进行故障排除,并且我遇到了许多编辑Makeconf文件以添加clang的提及。我已经做到了这一点,但仍然无法使用R中的C来工作。我非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您使用的是CRAN提供的R二进制文件,还是您自己编译的R版本?您是否使用新的XCode编译器或旧编译器编译R?

我的经验是CRAN-R可以与特定的编译器工具链一起使用,只要你为编译的所有软件包使用相同的工具链即可。例如,如果您尝试将new-XCode编译的包链接到旧的XCode编译的Rcpp,则会遇到问题。

据我所知,您的SHLIB_LIBADD错误表示您在MakevarsMakeconf中做了一些奇怪的事情,现在解析文件时出错了。我很想知道你是否可以用一个新的,CRAN提供的R来重现这个。

如果您尝试重新安装R +所有软件包,是否可以重现此问题?您应该尝试使用新的库目录重新安装R,然后重新安装这些有问题的软件包,并从那里开始。