调用pdftops在Matlab中不起作用

时间:2014-08-03 15:04:21

标签: matlab environment-variables

我想使用matlab的export_fig包。有一点这很有用,但现在已经坏了。错误发生在这里:

>> system('pdftops -h')
dyld: Library not loaded: /opt/local/lib/libtiff.5.dylib
  Referenced from: /opt/local/bin/pdftops
  Reason: Incompatible library version: pdftops requires version 8.0.0 or later, but libtiff.5.dylib provides version 6.0.0
pdftops -h: Trace/breakpoint trap

但是当我从我自己的bash终端呼叫pdftops时,一切正常。我想这一定是因为Matlab有一些不好的库路径或什么东西,但我不知道从哪里去?


matlab使用的一些相关环境变量:

>> system('env')
SHELL=/bin/bash
OSG_LD_LIBRARY_PATH=/Applications/MATLAB_R2013b.app/sys/openscenegraph/lib/maci64
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/usr/texbin
__CHECKFIX1436934=1
XFILESEARCHPATH=/Applications/MATLAB_R2013b.app/sys/java/jre/maci64/jre/lib/locale/%L/%T/%N%S:
DYLD_FRAMEWORK_PATH=/Applications/MATLAB_R2013b.app/sys/os/maci64:/Applications/MATLAB_R2013b.app/bin/maci64/../../Contents/MacOS:/Applications/MATLAB_R2013b.app/bin/maci64:/Applications/MATLAB_R2013b.app/extern/lib/maci64:/Applications/MATLAB_R2013b.app/sys/java/jre/maci64/jre/lib/./native_threads:/Applications/MATLAB_R2013b.app/sys/java/jre/maci64/jre/lib/./server:/Applications/MATLAB_R2013b.app/sys/java/jre/maci64/jre/lib/./lib/jli
SHLVL=1
__KMP_REGISTERED_LIB_33586=0x124404710-cafeb339-libiomp5.dylib
DYLD_LIBRARY_PATH=/Applications/MATLAB_R2013b.app/sys/os/maci64:/Applications/MATLAB_R2013b.app/bin/maci64/../../Contents/MacOS:/Applications/MATLAB_R2013b.app/bin/maci64:/Applications/MATLAB_R2013b.app/extern/lib/maci64:/Applications/MATLAB_R2013b.app/sys/java/jre/maci64/jre/lib/./native_threads:/Applications/MATLAB_R2013b.app/sys/java/jre/maci64/jre/lib/./server:/Applications/MATLAB_R2013b.app/sys/java/jre/maci64/jre/lib/./lib/jli

1 个答案:

答案 0 :(得分:1)

如果您查看错误消息,MATLAB使用libtiff来呼叫pdftops,但只有版本6.0.0。它说它需要版本8.0.0或更高版本。有一种情况发生在StackOverflow之前。有人试图安装mexopencv并遇到了您所说的相同错误:Compiling mexopencv in OS X 10.9 with Xcode 5 and Matlab R2013b

虽然这与您正在做的事情无关,但他们遇到了您所说的libtiff错误。他们提供了两种解决方案来解决这个错误:

  1. 进入MATLAB的根目录,然后转到bin/os目录,其中os是您正在使用的操作系统的目录(在我的例子中,它是maci64)。要进入根目录,请在命令提示符中执行以下操作:cd/(matlabroot)。进入此处后,找到libtiff.5.dylib文件并将其重命名为libtiff.5.dylib.bak,以便使用的libtiff库是系统默认的库而不是MATLAB在程序内部使用。

  2. 强制MATLAB指向作为系统一部分的库,而不是使用MATLAB内置的库。因此,在MATLAB的命令提示符下,运行以下命令:

  3. setenv('DYLD_INSERT_LIBRARIES','/opt/local/lib/libtiff.5.dylib');
    

    执行此操作后,您可能会遇到与其他库类似的更多错误。因此,您需要继续将这些库附加到setenv的第二个参数中并对其进行冒号分隔,直到您解决问题为止。您需要确保指向系统上的那些而不是使用MATLAB安装的系统。在你的情况下,你必须这样做:

    setenv('DYLD_INSERT_LIBRARIES', ...
    '/opt/local/lib/libtiff.5.dylib:/opt/local/lib/l‌​ibcurl.4.dylib');
    

    很高兴这有帮助!