我知道有很多关于这个主题的帖子,这可能是重复的,但我不这么认为。我的配置是: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
从启动Matlab的shell回显的环境变量LD_LIBRARY_PATH
包含/home/john/.local/arma/lib
(其中libarmadillo.so
是),我还使用setenv('LD_LIBRARY_PATH',...)
在Matlab中手动添加了此路径。我有什么遗失的吗?
答案 0 :(得分:1)
所以我发现了如何运行它。现在它是segfaulting:/我相当自信它不是代码本身,因为我可以在Matlab之外编译和运行完全相同的代码。我会试着找出什么是错的,如果它是相关的,我会在稍后发布我的冒险经历。
正在运行问题;似乎Matlab使用变量LD_RUN_PATH
在运行时加载共享库。在我的案例中,使用... /.local/arma/lib
将我的路径LD_RUN_PATH
添加到setenv
。为您的意见/答案干杯!
更新:我终于解决了这个问题,问题是由于Matlab之间的字大小不匹配(32/64位,即int32_t
与int64_t
) BLAS / LAPACK库和Armadillo的电话。我发布了两个解决方案here。