2009-09-04 35 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' 
$ 

有没有输出这个时候。问题修复!