2016-04-07 129 views
-2

該問題涉及運行'GAMMA SAR和干涉測量軟件'(GAMMA)。爲了在GAMMA中處理數據,用戶需要在shell中輸入複雜的命令。我試圖用Python來將這些命令準備爲字符串,並希望直接從Python運行/執行這些命令,而不是這種單調乏味的過程。dyld:Library未加載:libDIFF.dylib(在OSX El Capitan上)

下面是一個工作解決方案的簡化示例:我在Python中準備一個字符串並將其打印到命令行。如果我手動將Python打印的字符串複製/粘貼到shell中,則Gamma可以平穩運行。

工作碼

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

這得到乏味作爲每個命令需要被複制/從外殼到另一個殼粘貼。相反,我想運行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埃爾卡皮坦版本10.11.4,與Python 3.5.1運行|蟒蛇2.4.1(x86_64的)| (默認,2015年12月7日11:24:55)[達爾文GCC 4.2.1(Apple Inc. build 5577)]:

問這個問題的另一種方式:打字和跑步有什麼區別shell中的命令與從Python打印並執行相同的字符串。從技術上講,兩者都應該看到相同的變量/路徑/庫,但在這種情況下似乎有區別。 GAMMA似乎無法找到必要的庫。

+2

任何代碼,只有理論? – haifzhan

+0

[看看這個相關的問題](http://stackoverflow.com/questions/17703510/dyld-library-not-loaded-reason-image-not-loaded)。似乎你錯過了一個依賴關係,或者找不到所需的依賴關係。需要一些代碼來進一步診斷。你在什麼操作系統上?可能很可能是共享庫的簡單路徑問題。 –

+0

這可能取決於平臺。你在使用Apple iOS嗎?哪個版本?這是一個32位或64位的Python? – tdelaney

回答

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來完成安裝。

相關問題