2009-09-04 60 views
2

我已經使用我自己的Qt4庫編譯了Python模塊,位於~/opt/qt-4.6.0/, ,但是當我嘗試導入該模塊時,加載的動態庫來自我的MacPorts Qt4安裝。錯誤的Mac OS X框架被加載

$ /opt/local/bin/python2.6 
>>> import vtk 
objc[58041]: Class QMacSoundDelegate is implemented in both /Users/luis/opt/qt-4.6.0/lib/QtGui.framework/Versions/4/QtGui and /opt/local/libexec/qt4-mac/lib/QtGui.framework/Versions/4/QtGui. Using implementation from /opt/local/libexec/qt4-mac/lib/QtGui.framework/Versions/4/QtGui. 
objc[58045]: Class QCocoaColorPanelDelegate is implemented in both /Users/luis/opt/qt-4.6.0/lib/QtGui.framework/Versions/4/QtGui and /opt/local/libexec/qt4-mac/lib/QtGui.framework/Versions/4/QtGui. Using implementation from /opt/local/libexec/qt4-mac/lib/QtGui.framework/Versions/4/QtGui. 
[... more output like above ...] 
>>> 

有沒有告訴Python的(也是從MacPorts的安裝)加載位於我~/opt/qt-4.6.0/lib/目錄框架的一種方式?我不確定要更改哪些環境變量。

回答

2

嘗試將DYLD_LIBRARY_PATH把你的圖書館~/opt/qt/...的MacPorts的庫之前調用蟒蛇之前(看看~/.profile對於如何做到這一點,如果你不知道的一個例子的MacPorts做同樣的事情來把它的庫放在DYLD_LIBRARY_PATH上)。 dyld,OS X動態鏈接程序使用DYLD_LIBRARY_PATH在加載時(在其他方法中)查找庫;有關更多信息,請參見man dyld

+0

我以前試過LD_LIBRARY_PATH,但沒有奏效。不過,非常感謝指向'dyld'的指針。其手冊頁非常豐富。讓我們看看我能否用它來解決這個問題。 – Luis 2009-09-04 21:12:09

+0

您是否嘗試過DYLD_LIBRARY_PATH? – 2009-09-04 22:06:30

+0

...剛看到你的答案。很高興你想出來了。 – 2009-09-04 22:07:49

2

好吧,在Barry Wark指示我dyld(1)之後,手冊頁描述了一些我可以設置的變量。

第一個提示來自設置環境變量DYLD_PRINT_LIBRARIES,所以我可以看到正在加載的庫。

$ DYLD_PRINT_LIBRARIES=1 python -c 'import vtk' 
[... snip ...] 
dyld: loaded: /opt/local/libexec/qt4-mac/lib/QtGui.framework/Versions/4/QtGui 
dyld: loaded: /opt/local/lib/libpng12.0.dylib 
dyld: loaded: /opt/local/libexec/qt4-mac/lib/QtSql.framework/Versions/4/QtSql 
dyld: loaded: /opt/local/libexec/qt4-mac/lib/QtCore.framework/Versions/4/QtCore 
[... snip ...] 
dyld: loaded: /Users/luis/opt/qt-4.6.0/lib/QtGui.framework/Versions/4/QtGui 
dyld: loaded: /Users/luis/opt/qt-4.6.0/lib/QtSql.framework/Versions/4/QtSql 
dyld: loaded: /Users/luis/opt/qt-4.6.0/lib/QtCore.framework/Versions/4/QtCore 
[... snip ...] 
$ 

啊,所以qt4-mac的框架確實是先裝載的,就像我們懷疑的那樣。重新閱讀手冊頁,我們可以嘗試的下一件事是更改DYLD_FRAMEWORK_PATH,以便它知道在哪裏尋找。我現在該行添加到我的~/.bash_profile

export DYLD_FRAMEWORK_PATH="${HOME}/opt/qt-4.6.0/lib:${DYLD_FRAMEWORK_PATH}" 

末重新登錄後,我們嘗試再次導入vtk的Python模塊:

$ python -c 'import vtk' 
$ 

有沒有輸出這個時候。問題修復!