1

我从 Writing R Extensions 手册中阅读了一些内容,但我不太明白 - 我在 makevars 中将 -fopenmp 标志放在哪里?我可以设置

PKG_FCFLAGS = -fopenmp

编译得很好。但我不确定我是否也应该为PKG_LIBSand设置它PKG_CPPFLAGS

当我尝试PKG_LIBS它给我一个错误

i686-apple-darwin8-gfortran-4.2: libgomp.spec: No such file or directory

但是,如果我只是在其中使用它,PKG_FCFLAGS即使它编译得很好,当我尝试在 R 中使用该例程时,它会说

Error in dyn.load("correlate.so") : 
unable to load shared object '/Users/Steven/Documents/PhD/npsR/correlate.so':
dlopen(/Users/Steven/Documents/PhD/npsR/correlate.so, 6): Symbol not found: _GOMP_parallel_end
Referenced from: /Users/Steven/Documents/PhD/npsR/correlate.so
Expected in: dynamic lookup

所以很明显 gomp 库没有正确链接。有任何想法吗?

干杯。

4

2 回答 2

3

Luke Tierney 的 pnmath 包http://homepage.stat.uiowa.edu/~luke/R/experimental/使用 OpenMP 并在其 Makevars 中有以下内容:

PKG_CFLAGS=-fopenmp
PKG_LIBS=-lgomp

和 Makevars.win:

PKG_CFLAGS=-fopenmp
PKG_LIBS=-mthreads -lgomp -lpthreadGC2

您似乎在 Mac 上,所以可能两者都不起作用。但设置PKG_LIBS=-lgomp看起来很关键。

于 2012-09-20T11:03:16.927 回答
0

所以我已经解决了这个问题(虽然我现在已经打开了另一罐蠕虫......)。我不确定我做了什么解决了这个问题,但我会在这里列出我做了什么。

在发现 fortran 程序本身无法编译并与 openMP 链接(根本不计入 R)后,我认为这与 gfortran 安装有关。所以我所做的是:

  • 已卸载的 R
  • 卸载 gfortran
  • 从http://r.research.att.com/tools/gcc-42-5666.3-darwin11.pkg下载 gcc 和 gfortran
  • 安装了更新的 gcc+gfortran (gfortran v4.2.4)
  • 安装 R 2.15.1
  • PATH = /usr/bin:$PATH在我的行中设置.bash_profile
  • 在 Makevars 中设置两行:PKG_FCFLAGS = -fopenmpPKG_LIBS = -fopenmp. 看来这两个都是必要的。

然后它起作用了!顺便说一句,这是在 OS X 10.7 (Lion) 上。

感谢大家的帮助。

于 2012-09-24T10:44:06.633 回答