我从Writing R Extensions手册中读到了一些内容,但我无法弄明白这一点 - 我在哪里将-fopenmp标志放在makevars中?我可以设置
PKG_FCFLAGS = -fopenmp
编译好。但我不确定是否应该为PKG_LIBS
和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库没有正确链接。有什么想法吗?
干杯。
答案 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安装有关。所以我做的是:
PATH = /usr/bin:$PATH
.bash_profile
PKG_FCFLAGS = -fopenmp
和PKG_LIBS = -fopenmp
。看来这两者都是必要的。然后它奏效了!顺便说一下,这是在OS X 10.7(Lion)上。
感谢大家的帮助。