2014-04-16 61 views
0

我使用紅帽爲ARMv7交叉編譯了Armadillo。Armadillo找不到BLAS線性代數包

當我嘗試做矩陣乘法我得到的錯誤:從源

armadillo_bits/blas_wrapper.hpp:79: undefined reference to `wrapper_dgemv_' 

我建BLAS和LAPACK,似乎在尋找LAPACK,因爲它讓我做Cholesky分解沒有錯誤。

我已經建立了這樣的:

arm-linux-gnueabihf-g++ -march=armv7-a  -mthumb-interwork -mfloat-abi=hard 
-mfpu=neon  
-mtune=cortex-a9 --sysroot=/home/mg/yocto/build/tmp/sysroots/socfpga_cyclone5 
-DHAVE_CONFIG_H -I. -I.. --sysroot=/home/mg/yocto/build/tmp/sysroots 
/socfpga_cyclone5 -g -O2 -L/opt/altera-linux/linaro/gcc-linaro-arm-linux-gnueabihf- 
4.7-2012.11-20121123_linux/arm-linux-gnueabihf/lib -I/opt/altera-linux/linaro 
/gcc-linaro-arm-linux-gnueabihf-4.7-2012.11-20121123_linux/arm-linux-gnueabihf 
/include -llapack -lf2c -lblas -lm --sysroot=/home/mg/yocto/build/tmp/sysroots 
/socfpga_cyclone5 -MT AlgoLibTests.o -MD -MP -MF .deps/AlgoLibTests.Tpo -c -o 
AlgoLibTests.o AlgoLibTests.cpp 

我把我的BLAS和LAPACK在這裏:

/opt/altera-linux/linaro/gcc-linaro-arm-linux-gnueabihf- 
4.7-2012.11-20121123_linux/arm-linux-gnueabihf/lib 

如果我禁用BLAS的支持,它的計算速度非常緩慢。

這是在配置文件中

ARMA_USE_BLAS 

定義,這是禁用的。

ARMA_USE_WRAPPER 

ATLAS也被禁用。爲什麼沒有找到BLAS庫?

+0

如果正在使用以wrapper_開頭的任何函數,則意味着ARMA_USE_WRAPPER仍處於啓用狀態。檢查您是否安裝了多個Armadillo副本(例如,在/ usr/include或/ usr/local/include或您的主目錄中的某處) – mtall

+0

Hello mtall,我的Red Hat上有兩個安裝的,另一個安裝在源上爲ARM。在link.txt文件中,我拿走了所有使用/包含等的鏈接。此外,Cholesky分解需要70ms才能在241x241矩陣上執行。你知道它爲什麼這麼慢嗎?這是正常的嗎? – user1876942

+0

這應該是Cholesky + inv(r)* inv(r.t())* B需要70ms,我自己編寫的代碼需要40ms。我認爲BLAS會更快。使用求解(X,A,B)需要250ms? – user1876942

回答

0

當我試圖爲我的Android項目編譯Armadillo時,我也遇到了這個錯誤。我確定ARMA_USE_WRAPPER尚未禁用。這就是爲什麼你得到錯誤未定義的引用'wrapper_dgemv_'。再次檢查。

我還注意到,Mobile上的矩陣計算比我的Mac OS上的矩陣計算要慢。