15

我有一台新的 iMac,我正在尝试使用 Rcpp 库运行代码,该库一直在我的旧 iMac 和 Macbook Pro 上运行而没有问题。我已经尝试了所有我似乎无法弄清楚问题所在。

Xcode 5.0 已下载。然后安装命令行工具。已安装 R3.0.2。我下载了一个 gcc 编译器。当我在终端中输入 gcc 时 - 我得到“clang:” - 我认为这很好。

我得到的错误复制如下。提前感谢您的任何想法和建议。

Error (in R console):
llvm-g++-4.2 -arch x86_64 -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG  -I/usr/local/include  -I"/Library/Frameworks/R.framework/Versions/3.0/Resources/library/Rcpp/include"    -fPIC  -mtune=core2 -g -O2  -c SBM-Ccode.cpp -o SBM-Ccode.o 
Error in sourceCpp("SBM-Ccode.cpp") : 
  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).

/bin/sh: llvm-g++-4.2: command not found
make: *** [SBM-Ccode.o] Error 127
4

3 回答 3

18

我不确定“我下载了 gcc 编译器”是什么意思。您不需要下载自己的 gcc。您可以使用默认值,也可以通过在~/.R/Makevars文件中包含以下内容来使用 clang++:

CC=clang
CXX=clang++
CXXFLAGS= -O3 -pedantic

当您尝试时会发生什么devtools::has_devel

> require(devtools)
> 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=core2 -g -O2  -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 -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation
[1] TRUE

Rcpp::evalCpp

> require(Rcpp)
> evalCpp( "1+1")
[1] 2    
于 2013-10-21T21:37:57.467 回答
8

快速猜测:

  1. 您正在运行 Simon 构建/CRAN 提供的预构建 R 二进制文件。

  2. R 从它的编译时存储它的配置选项,这些会影响它的运行时。

  3. 通过文件检查$R_HOME/etc/Makeconf并查看 CC 和 CXX。

  4. 正如 Romain 建议的那样,覆盖CCCXX通过文件~/.R/Makevars.

  5. 再试一次。

编辑:我刚刚与一位同事确认,他在 Mac OS X 上遇到了完全相同的问题,他刚刚升级到 XCode 5——现在需要覆盖一个CCCXX因为 R 是用以前版本的 XCode 构建的。

于 2013-10-21T21:49:52.760 回答
5

一个更简单的解决方案如下。您应该在终端类型中软链接 llvm 编译器:

cd /usr/bin
sudo ln -fs clang llvm-gcc-4.2
sudo ln -fs clang++ llvm-g++-4.2

注意:这也适用于 Matlab 中的 mex。

于 2013-11-15T08:54:04.420 回答