我知道有很多关于该主题的文章,这可能是重复的,但是我不这么认为。我的配置是:Matlab R2014b,clang 3.4,Ubuntu 14.04,armadillo-4.600.4。
我有一个Armadillo的本地安装(不是系统安装的,所以要手动包括/链接),在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
是)中回显,我还使用手动在Matlab中添加了此路径setenv('LD_LIBRARY_PATH',...)
。有什么我想念的吗?
所以我找到了如何运行它。现在是段错误了:/而且我相当有信心这不是代码本身,因为我可以在Matlab之外编译和运行完全相同的代码。我将尝试找出问题所在,如果相关,我将在后面发布我的冒险经历。
对于运行问题;Matlab似乎LD_RUN_PATH
在运行时使用该变量来加载共享库。在我的案例中,添加我的使用途径... /.local/arma/lib
可以解决问题。为您的评论/答案加油!LD_RUN_PATH
setenv
更新:我终于解决了这个问题,这是由于Matlab的BLAS / LAPACK库和Armadillo的调用之间存在预期的字长不匹配(32/64位,即int32_t
vs. int64_t
)。我在这里发布了两种解决方案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句