R:由于缺少符号_omp_set_num_threads,无法加载数据表



我有一个带有导入列表的 R 包,并且在加载最新版本时从未遇到过问题。 我刚刚将data.table添加到列表中,现在无法加载包。

操作系统 : macOS Sierra 10.12.5/6

海湾合作委员会

Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 9.0.0 (clang-900.0.37)
Target: x86_64-apple-darwin16.7.0
Thread model: posix

进口

aws.s3,
data.table,
googledrive,
httr,
jsonlite,
lubridate,
plyr
RMixpanel,
rmongodb,
RPresto,
stringi,
stringr,
uuid

错误

openmp-utils.c:50:5: warning: implicit declaration of function 'omp_set_num_threads' is invalid in C99 [-Wimplicit-function-declaration]
omp_set_num_threads(1);
^
1 warning generated.
...
Error: package or namespace load failed for ‘data.table’ in dyn.load(file, DLLpath = DLLpath, ...):
unable to load shared object '/usr/local/lib/R/3.4/site-library/data.table/libs/datatable.so':
dlopen(/usr/local/lib/R/3.4/site-library/data.table/libs/datatable.so, 6): Symbol not found: _omp_set_num_threads
Referenced from: /usr/local/lib/R/3.4/site-library/data.table/libs/datatable.so
Expected in: flat namespace in /usr/local/lib/R/3.4/site-library/data.table/libs/datatable.so
Error: loading failed

我也尝试将plyr移动到高于data.table,但得到同样的错误。 对我错过的任何东西有什么想法吗?

我修复了我的错误并将 1.10.4-2 推送到 CRAN。

  • MacOS 上的 OpenMP 现在由 CRAN 支持,并包含在 CRAN 的 Mac 软件包二进制文件中。但是,在 MacOS 上从源代码安装 v1.10.4-1 失败,因为在编译时未启用 OpenMP,#2409。感谢Liz Macfie和@fupangpangpang的报道。未启用 OpenMP 时的启动消息已更新。

我在发布过程中添加了一个额外的步骤,以防止将来发生这种情况。

我昨天遇到了同样的问题,经过一些谷歌搜索,我设法通过指定 ~./R/Makevars 来安装data.table

就我而言,我使用macports并安装了gcc7。在macports下由gcc-mp-7和g ++ -mp-7引用

因此,要指定编译器使用这些而不是macOS上的默认clang,您需要创建一个文件 ~./R/Makevars 。然后添加以下行:

CC=gcc-mp-7 -fopenmp
CXX=g++-mp-7 -fopenmp

您还应该能够对较新版本的clang执行相同的操作,只需将gcc-mp-7更改为clang-omp(或等效的,具体取决于其安装位置),并且不要忘记相同的-fopenmp标志以启用多线程。

最新更新