matlab改变了我的linux应用程序的环境变量

时间:2014-10-03 12:01:11

标签: matlab environment-variables

我正在尝试从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

3 个答案:

答案 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库。