在 CRAN 上传递 R 包,并在 MACOS 上有问题 + OpenMP

Ser*_*gio 6 macos fortran r openmp cran

我有一个带有 Fortran 和 OpenMP的R 包,但无法通过 CRAN。我收到以下消息:

您的软件包不再安装在有 OpenMP 问题的 macOS 上。

我的Makevars文件是:

USE_FC_TO_LINK =
PKG_FFLAGS = $(SHLIB_OPENMP_FFLAGS)
PKG_LIBS = $(SHLIB_OPENMP_FFLAGS)

C_OBJS = init.o
FT_OBJS = e_bottomup.o e_topdown.o check_nt.o

all:
    @$(MAKE) $(SHLIB)
    @rm -f  *.o

$(SHLIB): $(FT_OBJS) $(C_OBJS)

init.o:  e_bottomup.o e_topdown.o check_nt.o
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题?谢谢。

编辑1:

我尝试添加标志 cpp:

USE_FC_TO_LINK =
PKG_FFLAGS = $(SHLIB_OPENMP_FFLAGS) *-cpp*
PKG_LIBS = $(SHLIB_OPENMP_FFLAGS)
Run Code Online (Sandbox Code Playgroud)

在 !omp 之前在 Fortran 代码上添加条件 #ifdef _OPENMP ...

但是使用 R CMD Check 我得到了消息:

Non-portable flags in variable 'PKG_FFLAGS': -cpp
Run Code Online (Sandbox Code Playgroud)

Ser*_*gio 3

Makevars 文件没问题。OMP 指令必须加注释 !$,包括 USE OMP。

例如,我使用 Fortran 和 OMP 创建了一个 R 包来测试(并使用它)。

我添加了一个 R 函数来返回每台机器中的最大线程数:

获取线程

Fortran 代码是:

SUBROUTINE checkntf (nt) 
!$ USE OMP_LIB

IMPLICIT NONE
INTEGER nt

!$ nt = OMP_GET_MAX_THREADS()

RETURN
END
Run Code Online (Sandbox Code Playgroud)

已安装在 Windows、Ubuntu 和 macOS 上,如下所示

在此输入图像描述