2

にある独自のQt4ライブラリを使用してPythonモジュールをコンパイルしました~/opt/qt-4.6.0/が、そのモジュールをインポートしようとすると、ロードされるダイナミックライブラリはMacPortsQt4インストールからのものです。

$ /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 ...]
>>> 

私の~/opt/qt-4.6.0/lib/ディレクトリにあるフレームワークをロードするようにPython(これもMacPortsからインストールされています)に指示する方法はありますか?変更する環境変数がわかりません。

4

2 に答える 2

2

Python を呼び出す前に、ライブラリを MacPorts のライブラリの前にDYLD_LIBRARY_PATH配置するように を設定してみてください(わからない場合は、これを行う方法の例を参照してください。MacPorts はライブラリを に配置するためにまったく同じことを行います)。、OS X ダイナミック リンカーは、ロード時にライブラリを検索するために使用します (他の方法の中でも特に)。詳細については、を参照してください。~/opt/qt/...~/.profileDYLD_LIBRARY_PATHdyldDYLD_LIBRARY_PATHman dyld

于 2009-09-04T20:18:04.060 に答える
2

わかりました。Barry Wark が私に を指摘した後dyld(1)、man ページには、設定できるいくつかの変数が記載されていました。

最初のヒントは環境変数の設定から得られた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 のフレームワークは確かに最初にロードされていました。man ページを読み直して、次に試すことができるのは、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'
$

今回は出力がありません。問題が修正されました!

于 2009-09-04T21:33:33.393 に答える