Ubuntu16.04安裝R包magick出現(xiàn)的問題

太長不看版

  • magick的安裝需要底層的imagemagick支持
  • Ubuntu16.04由于版本老舊熔酷,安裝的舊版imagemagick無法使用
  • 使用spack自己安裝新版,可以解決編譯問題染突。

果子老師向我求助唁情,讓我?guī)兔Π惭b一個R包, magick啊终。這個R包镜豹,我在自己的CentOS系統(tǒng)的服務(wù)器上安裝過,在我的Mac上裝過蓝牲,我覺得應(yīng)該不是個大問題趟脂。

然而,從最后我所花的時間來看例衍,這確實是個大問題昔期,因為這是果子老師提出的問題,但凡是他提出的問題肄渗,他肯定是前期花了點時間的镇眷,也就是常規(guī)的路子都走過了,實在沒法子才來找我出手翎嫡。

這個信息的報錯消息如下

magick.so: undefined symbol: _ZNK6Magick8GeometrycvNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEv

我通過檢索欠动,發(fā)現(xiàn)有人通過設(shè)置~/.R/Makevars里的C++配置解決過

CXX11=/usr/bin/g++

但是,我測試過了這個方法,并不可行具伍。不過翅雏,在這個思路下,我有兩個猜測

  • R語言版本或許要最新版4.2.2人芽,這是最簡單的思路望几。很大一部分問題都可以通過升級R來解決。
  • GCC版本低萤厅,無法提供magick所要求的庫橄抹。

對于第一個猜想,我編譯了最新R4.2.2, 但是發(fā)現(xiàn)并不是原因惕味。

對于第二個猜想楼誓,我得編譯一個gcc,這個我在2018年的【無root權(quán)限下解決編譯時的依賴問題】中介紹過名挥,但是那個操作太復(fù)雜了疟羹,現(xiàn)如今可以考慮用spack(https://spack.io/)。

# 關(guān)于spack的安裝和使用禀倔,不在此文介紹
spack install gcc
spack load gcc

但是榄融,基于最新的GCC去編譯R包依舊不行,甚至救湖,基于最新的GCC編譯的最新的R也不行愧杯。此時,我的心態(tài)有點暴躁捎谨,于是民效,我想著要不要就不在這臺服務(wù)器上編譯了憔维,用另一臺Ubuntu服務(wù)器編譯好涛救,復(fù)制過來不就好了嗎?

但是业扒,由于兩臺機子的Ubuntu版本不同检吆,結(jié)果有依賴庫的問題

錯誤: package or namespace load failed for ‘magick’ in dyn.load(file, DLLpath = DLLpath, ...):
 無法載入共享目標對象‘/home/xzg/R/x86_64-pc-linux-gnu-library/4.2/magick/libs/magick.so’::
  libMagick++-6.Q16.so.8: cannot open shared object file: No such file or directory

這個情況,有一種偷懶的方式程储,就是用ln 做了軟連接

ln -s   /usr/lib/x86_64-linux-gnu/libMagick++-6.Q16.so /usr/lib/x86_64-linux-gnu/libMagick++-6.Q16.so.8  

然而蹭沛,依舊報錯(好消息不是之前的錯誤)

  /home/xzg/R/x86_64-pc-linux-gnu-library/4.2/magick/libs/magick.so: 
  undefined symbol: _ZN6Magick5Image10fontWeightEm

盡管失敗了,但是我有了一個新的猜想章鲤, 那就是系統(tǒng)自帶的Magick的版本低了摊灭。有沒有一種可能,在R里败徊,我安裝舊版本的magick就可以避免這個問題呢帚呼?于是,我找到了它的歷史存檔 https://cran.r-project.org/src/contrib/Archive/magick/,從1.0測試到2.6 煤杀,無一成功眷蜈。

好吧,這條路也走不通沈自,那我只能去編譯一個最新的imagemagick

spack install imagemagick
spack load imagemagick

# 動態(tài)庫酌儒,沒有這行命令,編譯過程最后一步還是失敗
export LD_LIBRARY_PATH=/home/xzg/spack/opt/spack/linux-ubuntu18.04-skylake_avx512/gcc-7.5.0/imagemagick-7.0.8-7-663acxuiasjhkjxymveygisoduukdmpa/lib:$LD_LIBRARY_PATH

然后安裝magick枯途,終于這條路成功了忌怎!

終于,我可以斷定酪夷,果子老師之所以安裝不了magick是因為它的Ubuntu系統(tǒng)里沒有安裝最新的imagemagick底層庫呆躲。之所以,他沒法用下面的語句安裝最新的imagemagick底層庫捶索,是因為它用的是16.04版本Ubuntu插掂。

sudo apt-get update
sudo apt-get install -y libmagick++-dev

不過,問題還是沒有順利的解決腥例,因為我們希望這個包是給所有人用的辅甥,而非自己用。

有兩種方法燎竖,一種是讓其他用戶添加一個環(huán)境變量璃弄,LD_LIBRARY_PATH。

另一種方式构回,當你是root用戶夏块,你就可以在 /etc/ld.so.conf.d/里加上一個配置文件,比如說我的是纤掸,imagemagick-7.0.8-7-663.conf脐供,里面是lib路徑

/home/xzg/spack/opt/spack/linux-ubuntu18.04-skylake_avx512/gcc-7.5.0/imagemagick-7.0.8-7-663acxuiasjhkjxymveygisoduukdmpa/lib

然后調(diào)用ldconfig 讓配置生效,就可以讓我們自己編譯的動態(tài)庫變成系統(tǒng)級借跪。

故事到這里基本就結(jié)束了政己,只有最后一個小插曲,那就是果子老師最終目標是安裝spatialLIBD

BiocManager::install("spatialLIBD")

但是安裝過程中,另一個R包textshaping出錯掏愁,提示信息如下

--------------------------- [ANTICONF] --------------------------------
Configuration failed to find the harfbuzz freetype2 fribidi library. Try installing:
 * deb: libharfbuzz-dev libfribidi-dev (Debian, Ubuntu, etc)
 * rpm: harfbuzz-devel fribidi-devel (Fedora, EPEL)
 * csw: libharfbuzz_dev libfribidi_dev (Solaris)
 * brew: harfbuzz fribidi (OSX)
If harfbuzz freetype2 fribidi is already installed, check that 'pkg-config' is in your
PATH and PKG_CONFIG_PATH contains a harfbuzz freetype2 fribidi.pc file. If pkg-config
is unavailable you can set INCLUDE_DIR and LIB_DIR manually via:
R CMD INSTALL --configure-vars='INCLUDE_DIR=... LIB_DIR=...'
-------------------------- [ERROR MESSAGE] ---------------------------
<stdin>:1:10: fatal error: hb-ft.h: No such file or directory
compilation terminated.
--------------------------------------------------------------------
ERROR: configuration failed for package ‘textshaping’
* removing ‘/opt/R-4.2.1/lib/R/library/textshaping’

其實解決思路很簡單歇由,也就是用 apt install libharfbuzz-dev libfribidi-dev去安裝這個依賴就好。然而果港,沒有那么順利

下列軟件包有未滿足的依賴關(guān)系:
 libfribidi-dev : 依賴: libfribidi0 (= 0.19.7-1) 但是 0.19.7-2 正要被安裝
E: 無法修正錯誤沦泌,因為您要求某些軟件包保持現(xiàn)狀,就是它們破壞了軟件包間的依賴關(guān)系

不過辛掠,無所謂了谢谦,我直接用 spack自己裝一份fribidi就好了。

參考資料

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市他宛,隨后出現(xiàn)的幾起案子船侧,更是在濱河造成了極大的恐慌,老刑警劉巖厅各,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件镜撩,死亡現(xiàn)場離奇詭異,居然都是意外死亡队塘,警方通過查閱死者的電腦和手機袁梗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來憔古,“玉大人遮怜,你說我怎么就攤上這事『枋校” “怎么了锯梁?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長焰情。 經(jīng)常有香客問我陌凳,道長,這世上最難降的妖魔是什么内舟? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任合敦,我火速辦了婚禮,結(jié)果婚禮上验游,老公的妹妹穿的比我還像新娘充岛。我一直安慰自己,他們只是感情好耕蝉,可當我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布崔梗。 她就那樣靜靜地躺著,像睡著了一般赔硫。 火紅的嫁衣襯著肌膚如雪炒俱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天爪膊,我揣著相機與錄音,去河邊找鬼砸王。 笑死推盛,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的谦铃。 我是一名探鬼主播耘成,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瘪菌?” 一聲冷哼從身側(cè)響起撒会,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎师妙,沒想到半個月后诵肛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡默穴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年怔檩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蓄诽。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡薛训,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出仑氛,到底是詐尸還是另有隱情乙埃,我是刑警寧澤,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布锯岖,位于F島的核電站膊爪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏嚎莉。R本人自食惡果不足惜米酬,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望趋箩。 院中可真熱鬧赃额,春花似錦、人聲如沸叫确。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽竹勉。三九已至飞盆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間次乓,已是汗流浹背吓歇。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留票腰,地道東北人城看。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內(nèi)容