我正在尝试从MATLAB shell运行一个名为mf2k的应用程序。在Bash shell中,此命令显示为:
$ ldd mf2k.mac linux-vdso.so.1 (0x00007fff807d6000)
libc.so.6 => /lib64/libc.so.6 (0x00007f4e3c32d000)
libgfortran.so.3 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/libgfortran.so.3 (0x00007f4e3c017000)
libm.so.6 => /lib64/libm.so.6 (0x00007f4e3bd16000)
libgcc_s.so.1 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/libgcc_s.so.1 (0x00007f4e3bb00000)
libquadmath.so.0 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/libquadmath.so.0 (0x00007f4e3b8ca000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4e3c6d4000)
但是,一旦我在matlab shell中执行相同的命令,它就会返回
>> !ldd mf2k.mac
./mf2k.mac: /home/chenming/SLhome/chenming/apps/Matlab2012b/sys/os/glnxa64/libgfortran.so.3: version `GFORTRAN_1.4' not found (required by ./mf2k.mac)
linux-vdso.so.1 (0x00007fffd637f000)
libc.so.6 => /lib64/libc.so.6 (0x00007f2e226aa000)
libgfortran.so.3 => /home/chenming/SLhome/chenming/apps/Matlab2012b/sys/os/glnxa64/libgfortran.so.3 (0x00007f2e223bf000)
libm.so.6 => /lib64/libm.so.6 (0x00007f2e220be000)
libgcc_s.so.1 => /home/chenming/SLhome/chenming/apps/Matlab2012b/sys/os/glnxa64/libgcc_s.so.1 (0x00007f2e21ea8000)
libquadmath.so.0 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/libquadmath.so.0 (0x00007f2e21c72000)
/lib64/ld-linux-x86-64.so.2 (0x00007f2e22a51000)
请注意,libgfortran.so.3和libgcc_s.so.1的路径已更改。
如何在MATLAB schell中设置环境变量?我发现这个问题与question有关,但他们的解决方案并不适用于此。
----------------------- update ----------------------- ----------
这是在bash shell和matlab shell中运行的 $ echo $ LD_LIBRARY_PATH 。
在bash shell中:
$ echo $LD_LIBRARY_PATH
/opt/intel/composer_xe_2011_sp1.9.293/compiler/lib/intel64:/opt/intel/composer_xe_2011_sp1.9.293/compiler/lib/intel64:/opt/intel/composer_xe_2011_sp1.9.293/mkl/lib/intel64:/opt/intel/composer_xe_2011_sp1.9.293/debugger/lib/intel64:/opt/intel/composer_xe_2011_sp1.9.293/mpirt/lib/intel64
在Matlab shell中:
>> ! echo $LD_LIBRARY_PATH
/home/chenming/SLhome/chenming/apps/Matlab2012b/sys/os/glnxa64:/home/chenming/SLhome/chenming/apps/Matlab2012b/bin/glnxa64:/home/chenming/SLhome/chenming/apps/Matlab2012b/extern/lib/glnxa64:/home/chenming/SLhome/chenming/apps/Matlab2012b/runtime/glnxa64:/home/chenming/SLhome/chenming/apps/Matlab2012b/sys/java/jre/glnxa64/jre/lib/amd64/native_threads:/home/chenming/SLhome/chenming/apps/Matlab2012b/sys/java/jre/glnxa64/jre/lib/amd64/server:/home/chenming/SLhome/chenming/apps/Matlab2012b/sys/java/jre/glnxa64/jre/lib/amd64:/opt/intel/composer_xe_2011_sp1.9.293/compiler/lib/intel64:/opt/intel/composer_xe_2011_sp1.9.293/compiler/lib/intel64:/opt/intel/composer_xe_2011_sp1.9.293/mkl/lib/intel64:/opt/intel/composer_xe_2011_sp1.9.293/debugger/lib/intel64:/opt/intel/composer_xe_2011_sp1.9.293/mpirt/lib/intel64
答案 0 :(得分:0)
你的bashrc中有什么?检查bashrc中的$ LD_LIBRARY_PATH。在LD库路径中,matlab必须在系统变量之前。如果您使用bash或.cshrc,如果shell是csh,则通常在.bashrc或.bash_profile中设置$ LD_LIBRARY_PATH。命令
echo $LD_LIBRARY_PATH
将打印您的路径和
export LD_LIBRARY_PATH=/path/to/libdir/you/want/to add:$LD_LIBRARY_PATH
将更改订单。
编辑: 您的应用程序mf2k有什么作用?我假设它是一个FORTRAN程序,你已经编译并链接到gfortran库,它不在matlab shell中运行。你能静态编译mf2k,以便它在运行时不需要库。您也可以尝试在matlab中执行以下shell脚本:
!#/bin/bash
export LD_LIBRARY_PATH=/opt/intel/composer_xe_2011_sp1.9.293/compiler/lib/intel64:/opt/intel/composer_xe_2011_sp1.9.293/compiler/lib/intel64:/opt/intel/composer_xe_2011_sp1.9.293/mkl/lib/intel64:/opt/intel/composer_xe_2011_sp1.9.293/debugger/lib/intel64:/opt/intel/composer_xe_2011_sp1.9.293/mpirt/lib/intel64
./mf2k
答案 1 :(得分:0)
Matlab将自己的库添加到LD_LIBRARY_PATH
,你不能改变它,因为如果强迫它使用你的系统库,它很可能会破坏matlab应用程序。
您可以执行的操作是在Matlab中设置LD_LIBRARY_PATH
,然后使用setenv
调用您的应用程序,如您链接的问题中所述。我不明白它在你的情况下是如何适用的。
答案 2 :(得分:0)
只需在 MATLAB 中运行命令:
setenv('LD_LIBRARY_PATH',[getenv('PATH')getenv('LD_LIBRARY_PATH')])
它在系统库中附加了matlab库。