在fortran和R中使用openMP - 我在哪里设置-fopenmp?

时间:2012-09-20 08:54:15

标签: r openmp

我从Writing R Extensions手册中读到了一些内容,但我无法弄明白这一点 - 我在哪里将-fopenmp标志放在makevars中?我可以设置

PKG_FCFLAGS = -fopenmp

编译好。但我不确定是否应该为PKG_LIBSPKG_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库没有正确链接。有什么想法吗?

干杯。

2 个答案:

答案 0 :(得分: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看起来很重要。

答案 1 :(得分: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)上。

感谢大家的帮助。