2015-02-09 187 views
1

我知道有很多的話題的帖子,這可能是重複的,但我不這麼認爲。我的配置是:Matlab R2014b,鐺3.4,Ubuntu 14.04,犰狳-4.600.4。無效MEX文件,libarmadillo,無法打開共享對象文件

我有一個本地安裝(不制度上,所以包括/手動連接)犰狳的,當外界Matlab的的正常工作。 我正在嘗試使用Matlab中的Armadillo運行Mex文件。

mex -compatibleArrayDims -outdir +mx -L/home/john/.local/arma/lib -larmadillo -I/home/john/.local/arma/include test_arma.cpp 

問題是,當我嘗試運行它,我得到這個錯誤:

Error using mx.test_arma 
Invalid MEX-file '/path/to/+mx/test_arma.mexa64': libarmadillo.so.4: cannot open shared object file: No such file or directory 

環境變量LD_LIBRARY_PATH從啓動Matlab的外殼呼應它使用命令(截短的簡稱)編譯罰款包含/home/john/.local/arma/lib(其中libarmadillo.so是),並且我還使用setenv('LD_LIBRARY_PATH',...)在Matlab內手動添加了此路徑。有什麼我失蹤?

+1

我現在沒有鏈接,但MATLAB對'LD_LIBRARY_PATH'很有趣。也許先嚐試一個符號鏈接。另外,你確定你添加到路徑上的依賴是64位的。我不知道Ubuntu的文件夾結構。 – chappjc 2015-02-09 15:26:35

+0

@chappjc您對64位的評論很有趣,我將仔細檢查所有內容,並從頭開始重新編譯我的共享庫,以確保沒有不匹配,因爲正如我所說我現在正在接受段錯誤,米相當有信心它不是從代碼本身。 – Sheljohn 2015-02-09 17:19:07

回答

1

所以,我發現瞭如何運行它。現在它是segfaulting:/我相當有信心它不是代碼本身,因爲我可以編譯和運行Matlab以外完全相同的代碼。我會試着找出什麼是錯的,如果它是相關的,我會在稍後發佈我的冒險經歷。

對於運行問題;似乎Matlab使用變量LD_RUN_PATH在運行時加載共享庫。在我的情況下,使用setenv追加我的路徑... /.local/arma/libLD_RUN_PATH。歡呼你的評論/答案!

更新:我終於解決了這個,這個問題是由於Matlab的BLAS/LAPACK庫和犰狳的通話之間的預期字詞大小不匹配(32/64位,即int32_tint64_t)。有兩種解決方案我發佈了here

+1

啊!我必須記住'LD_RUN_PATH'變量。我知道MATLAB環境有些不同,但我很少使用Linux ... + 1順便說一句,爲什麼'-compatibleArrayDims'? – chappjc 2015-02-09 17:32:36

+0

@chappjc默認情況下,Matlab的新版本默認啓用'-largeArrayDims'(或類似的東西),這實質上定義'mwSize'爲'uint64_t'。我使用我自己的庫,它本身使用犰狳,我現在正在使用'uint32_t'。 '''''''''''''''''''''''compatibleArrayDims'只是一種恢復「舊方式」的方法,並且使用32位而不是64位進行索引:)(注意我自己:這可能是我的段錯誤的原因, Mex預計32位庫..) – Sheljohn 2015-02-09 17:39:52

+0

因此,您使用無符號的32位索引,得到它。但我認爲你的意思是'unsigned long long'是64位。 ;) – chappjc 2015-02-09 17:44:24

相關問題