2017-10-10 37 views
4

我有一個包含導入列表的R包,從未遇到加載最新版本的問題。我剛剛將data.table添加到列表中,現在無法加載該包。R:由於丟失符號而無法加載data.table _omp_set_num_threads

OS:MACOS塞拉利昂10.12.5/6

GCC

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,但得到相同的錯誤。任何我想念的東西的想法?

+0

您剛剛升級到了CRAN上的1.10.4-1嗎?在新的R會話中,'test.data.table()'是否工作?懷疑這是一個安裝/升級問題。 –

+0

當你使用'parallel'包進行fork時,會調用這一行。你在使用'parallel'包嗎?這是我在這個補丁中已經改變的東西,所以我很可能會被指責。我們可以看到您的完整安裝輸出,看看它是否在安裝時發現openMP。 –

+3

我現在看到。我的錯。當OpenMP不可用時,我沒有在#ifdef中包裝呼叫。很難測試這樣的事情,因爲我們不得不卸載OpenMP來測試它。 –

回答

2

我修正了我的錯誤,並把1.10.4-2推到了CRAN。在Mac OS

  • 的OpenMP現在由CRAN支持,包括在CRAN的爲Mac包二進制文件。但是,在編譯時未啓用OpenMP時,在MacOS上從源安裝v1.10.4-1失敗,#2409。感謝Liz Macfie和@fupangpangpang進行報道。 OpenMP未啓用時的啓動消息已更新。

我在發佈過程中增加了一個額外的步驟,以防止在將來發生這種情況。

1

我昨天有同樣的問題,並在一些谷歌搜索後,我設法通過指定〜。/ R/Makevars安裝data.table

在我的情況下,我用macports並安裝了gcc7。所以要指定編譯器在macOS上使用這些而不是默認的clang,你需要創建一個文件〜./R/Makevars()./R/Makevars()./R/Makevars.zip 。然後添加以下行:

CC = GCC-MP-7 -fopenmp
CXX = G ++ - MP-7 -fopenmp

你也應該能夠做同樣的較新版本的clang只是將gcc-mp-7更改爲clang-omp(或者等價物,取決於它的安裝位置),並且不要忘記相同的-fopenmp標誌以啓用多線程。

+2

或者按照[說明](https://github.com/Rdatatable/data.table/wiki/Installation#openmp-enabled-compiler-for-mac)。 –

相關問題