在虛擬機(jī)centOS 7上安裝dlib,安裝結(jié)束顯示Successfully了笨忌,但是進(jìn)入python后import dlib卻提示“undefined symbol:cblas_ddot”佳魔。
網(wǎng)上搜了很久基本沒(méi)什么對(duì)應(yīng)的解決方案忆肾,dlib的github中有一個(gè)issue是類(lèi)似的問(wèn)題:https://github.com/davisking/dlib/issues/154浪藻,但是跟我的請(qǐng)情況也不太一樣狈谊。
使用yum安裝blas和lapack也沒(méi)用,可能是因?yàn)槲沂怯胮ython3安裝的dlib卢厂,而yum對(duì)應(yīng)的是python2吃靠。于是參考一些資料自己動(dòng)手編譯安裝blas、cblas和lapack足淆,安裝完成后依然提示此錯(cuò)誤巢块。
在安裝dlib過(guò)程中,程序會(huì)檢測(cè)blas是否能找到巧号,提示的是“Found CBLAS LIBRARY”族奢、“Found LAPACK LIBRARY”,但是依然提示“BLAS library does not have cblas symbols, so dlib will not use BLAS or LAPACK”丹鸿。
根據(jù)上面github的issue越走,查看dlib源代碼中的 .dlib/dlib/cmake_utils/cmake_find_blas.txt 文件,該文件就是檢查BLAS環(huán)境的代碼靠欢,查看代碼可以發(fā)現(xiàn)廊敌,其嘗試從多種方法查找系統(tǒng)的的BLAS庫(kù),在我的情況中门怪,該代碼找到了CBLAS骡澈,然后進(jìn)行進(jìn)一步檢測(cè)是否有 cblas_ddot 時(shí)沒(méi)找到,我的用CBLAS中明明有cblas_ddot掷空,且在終端用命名“l(fā)ocate cblas_ddot”也可以找到肋殴,不知道為什么程序就是找不到。
從上圖的代碼中可以看到程序的執(zhí)行過(guò)程坦弟,總之不知道為什么找不到护锤。
后來(lái)發(fā)現(xiàn)程序會(huì)檢查openblas,也就是說(shuō)如果安裝openblas也應(yīng)該有用:
抱著死馬當(dāng)活馬醫(yī)的心態(tài)試了試安裝openblas酿傍,步驟是:
- 從www.openblas.net下載tar壓縮包
- 解壓后從命令號(hào)進(jìn)入文件夾烙懦,執(zhí)行“make”命令進(jìn)行編譯,這一步需要一些時(shí)間
- 編譯完后執(zhí)行“make install”命令進(jìn)行安裝
安裝完openblas后再執(zhí)行dlib的安裝赤炒,發(fā)現(xiàn)不再提示“BLAS library does not have cblas symbols, so dlib will not use BLAS or LAPACK”了氯析。安裝完畢后進(jìn)入python3,import dlib可霎,成功魄鸦!
其實(shí)import時(shí)還不是直接成功,依然提示“l(fā)ibopenblas.so.0 cannot open shared object file: No such file or directory”癣朗。
不過(guò)沒(méi)關(guān)系拾因,針對(duì)這種情況,我們已經(jīng)遇到過(guò)一次旷余,知道解決方案了:解決方案绢记,這類(lèi)問(wèn)題的解決方案都差不多。解決后就可以成功使用dlib了正卧。