无效MEX文件,libarmadillo,无法打开共享对象文件

问题描述:

我知道有很多的话题的帖子,这可能是重复的,但我不这么认为。我的配置是: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

所以,我发现了如何运行它。现在它是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