簡體   English   中英

如何告訴超級計算機上的C ++編譯器我的R包需要C ++ 0x?

[英]How do I tell the C++ compiler on a supercomputer that my R package requires C++0x?

我已經寫和內置的R包取決於Rcpp和要求C++0x標准(用於使用tgamma函數在C ++)。 我已經在各種台式計算機和操作系統上測試了軟件包,它似乎總是安裝並正常工作。 但是,我還想在HPC服務器上使用該軟件包。 當我嘗試使用R CMD INSTALL test (其中test是包的名稱)在我的本地R庫樹中R CMD INSTALL test包時,我從編譯器收到以下錯誤消息:

/usr/include/c++/4.4.7/c++0x_warning.h(31):災難性錯誤:#error指令:此文件需要編譯器和庫支持即將推出的ISO C ++標准C ++ 0x。 此支持目前是實驗性的,必須使用-std = c ++ 0x或-std = gnu ++ 0x編譯器選項啟用。 #error此文件需要編譯器和庫支持即將到來的\\ ^

編譯中止Metropolis_Sampler_Beta_Edgewise_Cpp_Statistics.cpp(代碼4)make:*** [Metropolis_Sampler_Beta_Edgewise_Cpp_Statistics.o]錯誤4錯誤:包'test'的編譯失敗

它基本上告訴我在調用編譯器時應該啟用C ++ 0x支持(如本文所述 )。 然而,我認為將語句CXX_STD = CXX11添加到R包中的src/Makevars文件實際上會告訴編譯器需要使用此版本。 事實上,在我嘗試的各種台式電腦上似乎就是這種情況。 所以我的問題是:如何告訴服務器上的編譯器這個C ++版本應該用於編譯? 或者,我怎么能安裝包?

在服務器上,我通過在嘗試安裝軟件包之前在終端上輸入module load math/Rmodule load math/R R module load math/R ,並報告已加載以下模塊:

加載模塊依賴'compiler / intel / 13.1'。

加載模塊依賴項'numlib / mkl / 11.0.5'。

編輯1 :服務器是名為bwUniCluster的德國大學集群。 它基於KITE 2.0 / RHEL6.5 / Lustre 2.5.2。 據我所知,從上面報告的模塊消息來看,它似乎是英特爾C ++編譯器XE(ICPC)版本13.1.3。 但實際上我對編譯器一無所知,所以如果你需要了解更具體的內容,請告訴我。

編輯2在嘗試安裝軟件包之前,還可以在終端上執行module load compiler/gnu/4.9 這會導致以下錯誤消息(類似於上面的錯誤消息),這使我認為這不是版本問題:

/pfs/data1/software_uc1/bwhpc/common/compiler/gnu/4.9.2/bin/../include/c++/4.9.2/bits/c++0x_warning.h(32):災難性錯誤:#error指令:此文件需要ISO C ++ 2011標准的編譯器和庫支持。 此支持目前是實驗性的,必須使用-std = c ++ 11或-std = gnu ++ 11編譯器選項啟用。 #error此文件需要對\\ ^的編譯器和庫支持

編譯中止Metropolis_Sampler_Beta_Edgewise_Cpp_Statistics.cpp(代碼4)make:*** [Metropolis_Sampler_Beta_Edgewise_Cpp_Statistics.o]錯誤4錯誤:包'test'的編譯失敗

編輯3 :其中一條評論表明R包和R本身都需要使用相同的編譯器版本進行編譯。 這個對嗎? R是在這台機器上使用g ++ 4.4.7構建的。 這是否意味着唯一可行的解​​決方案是說服系統管理員使用其他4.9.2編譯器重新編譯R並將其作為新模塊提供? 考慮到“ Writing R Extensions ”手冊中的以下句子,我覺得很難相信:

在這些平台上,有必要通過個人或站點Makevars文件為C ++ 11選擇不同的編譯器。

解決方案確實是使用更新的編譯器在服務器上重新編譯R,在本例中為Intel 14(如原始帖子中的編輯3中所述)。 系統管理員非常友好地為這個R版本設置了一個新模塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM