dyld:未加载库:libDIFF.dylib(在OSX El Capitan上)

时间:2016-04-07 22:17:10

标签: python shell command-line osx-elcapitan

问题与运行'GAMMA SAR和干涉测量软件'(GAMMA)有关。要在GAMMA中处理数据,用户需要在shell中键入复杂命令。我尝试使用Python将这些命令准备为字符串,并希望直接从Python运行/执行这些命令,而不是这个繁琐的过程。

下面是一个工作解决方案的简化示例:我在Python中准备一个字符串并将其打印到命令行。如果我然后手动将Python打印到的shell中的字符串复制/粘贴到同一个shell,Gamma运行顺畅。

工作代码

# Visualize interferogram 
p = 'dismph TMX.int 1189'
print(p)  #copy/pasting this output to a command line runs the external program

由于每个命令都需要从shell复制/粘贴到另一个shell,因此这很麻烦。相反,我想只运行Python并将命令打印到执行它们的shell。以下代码能够将字符串打印到shell并执行它。

问题代码

import os

# Visualize interferogram 
p = 'dismph TMX.int 1189'
os.system(p) 

不幸的是,我收到以下错误消息。

错误

dyld: Library not loaded: libDIFF.dylib

Referenced from: /Users/[username]/[programname]/[functionname]/bin/dismph
Reason: image not found

此示例在OSX El Capitan,版本10.11.4上运行,使用Python 3.5.1 | Anaconda 2.4.1(x86_64)| (默认,2015年12月7日,11:24:55)[GCC 4.2.1(Apple Inc. build 5577)]在达尔文:

提出这个问题的另一种方式:在shell中输入和运行命令与打印和从Python执行相同的字符串之间有什么区别。从技术上讲,两者都应该看到相同的变量/路径/库,但在这种情况下似乎存在差异。 GAMMA似乎无法找到必要的库。

1 个答案:

答案 0 :(得分:0)

我将回答我自己的问题,希望其他人能看到这个解决方案,这将有助于他们排除类似问题。

我看到的问题与El Capitan的新安全升级有关,称为SIP(系统完整性保护)。它可以防止修改某些环境变量并修改受保护系统目录中的程序。 El Capitan不允许子进程重新分配某些环境变量,以防止恶意程序破坏系统安全性。 https://support.apple.com/en-us/HT204899http://www.macworld.com/article/2948140/os-x/private-i-el-capitans-system-integrity-protection-will-shift-utilities-functions.html

简单的解决方案是将共享对象库复制到/ usr / local / lib(或您各自的默认PATH变量),然后一切都像以前一样工作。

可以在El Capitan上关闭SIP,但必须通过启动到恢复分区并关闭安装SIP来完成。