错误的Mac OS X框架被加载

时间:2009-09-04 19:40:31

标签: python macos qt4 macports vtk

我使用位于~/opt/qt-4.6.0/的我自己的Qt4库编译了一个Python模块, 但是当我尝试导入该模块时,加载的动态库来自我的MacPorts Qt4安装。

$ /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 个答案:

答案 0 :(得分:2)

尝试设置DYLD_LIBRARY_PATH以便在调用python之前将库放在~/opt/qt/...之前的MacPorts库中(请查看~/.profile,了解如何执行此操作的示例不知道; MacPorts将其库放在DYLD_LIBRARY_PATH上完全相同。 dyld,OS X动态链接器使用DYLD_LIBRARY_PATH在加载时查找库(以及其他方法);有关详细信息,请参阅man dyld

答案 1 :(得分: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'
$

这次没有输出。问题已修复!