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

Invalid mex-file, libarmadillo, cannot open shared object file

我知道有很多关于该主题的帖子,这可能是重复的,但我不这么认为。我的配置是:Matlab R2014b, clang 3.4, Ubuntu 14.04, armadillo-4.600.4.

我有一个 Armadillo 的本地安装(不是系统方面的,所以 including/linking 手动安装)在 Matlab 之外时工作正常。 我正在尝试使用来自 Matlab 的 Armadillo 运行 一个 Mex 文件。它使用命令编译得很好(简称为 t运行):

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 是),我还在 Matlab 中使用手动添加了此路径setenv('LD_LIBRARY_PATH',...)。有什么我想念的吗?

所以我找到了如何 运行 它。现在是段错误:/ 而且我非常有信心这不是代码本身,因为我可以在 Matlab 之外编译和 运行 完全相同的代码。我会尝试找出问题所在,如果相关,我稍后会 post 我的冒险经历。

针对运行ning问题;似乎 Matlab 使用变量 LD_RUN_PATH 在 运行 时间加载共享库。使用 setenv 将我的路径 ... /.local/arma/lib 附加到 LD_RUN_PATH 在我的案例中达到了目的。为你的comments/answers喝彩!

更新: 我终于解决了这个问题,问题是由于预期的字长不匹配(32/64 位,即 int32_tint64_t) 在 Matlab 的 BLAS/LAPACK 库和犰狳的调用之间。我 posted .

有两个解决方案