Python 模块无法加载共享库,原因:找不到图像
Python module cannot load shared library, Reason: image not found
我正在尝试使用应用程序附带的 Houdini Python 模块,它是 Houdini 安装文件夹的一部分,位于标准 Python 路径之外。按照安装说明进行操作后,运行 Houdini Terminal 16.5.571 脚本并将 /Applications/Houdini/Houdini16.5.571/Frameworks/Houdini.framework/Versions/Current/Resources/houdini/python2.7libs
添加到 _virtualenv_path_extensions.pth
在我的 site-packages
文件夹中hou
模块可以导入,即 Python 部分。但是它无法加载动态库。
错误信息
Traceback (most recent call last):
File "myscript.py", line 7, in <module>
import hou
File "/Applications/Houdini/Houdini16.5.571/Frameworks/Houdini.framework/Versions/Current/Resources/houdini/python2.7libs/hou.py", line 19, in <module>
import _hou
ImportError: dlopen(/Applications/Houdini/Houdini16.5.571/Frameworks/Houdini.framework/Versions/Current/Resources/houdini/python2.7libs/_hou.so, 2): Library not loaded: @rpath/Houdini.framework/Versions/16.5.571/Houdini
Referenced from: /Applications/Houdini/Houdini16.5.571/Frameworks/Houdini.framework/Versions/Current/Resources/houdini/python2.7libs/_hou.so
Reason: image not found
错误消息中提到的所有文件和文件夹都位于 Houdini 路径 /Applications/Houdini/Houdini16.5.571/Frameworks/Houdini.framework/Versions/Current
中,其中 Current
是 16.5.571
的符号link。
Python模块
Resources/houdini/python2.7libs/hou.py
找到 Python 模块。
共享库
Resources/houdini/python2.7libs/_hou.so`
这包含对 @rpath/Houdini.framework/Versions/16.5.571/Houdini
的引用,它可能正在尝试查找。
Houdini
这似乎 link 到实际的 dylib
文件,包含 @loader_path/Libraries
和 dylib...@rpath/libHoudiniUI
等以及许多其他文件。
我在这里读到 可能是 SIP 引起的,但即使在 ln -s
共享库进入 /usr/local/lib
之后,错误仍然发生。
我正在使用 pyenv
但尝试使用系统 Python 环境,导致相同的行为。
有什么建议吗?
dyld: Library not loaded ... Reason: Image not loaded 中的答案为我指明了正确的方向,建议使用 otool
重写动态库路径。
列出 _hou.so
加载的所有库,显示以下列表,其中 @rpath/Houdini.framework/Versions/16.5.571/Houdini
是导致问题的库。
otool -L /Applications/Houdini/Houdini16.5.571/Frameworks/Houdini.framework/Versions/Current/Resources/houdini/python2.7libs/_hou.so
/Applications/Houdini/Houdini16.5.571/Frameworks/Houdini.framework/Versions/Current/Resources/houdini/python2.7libs/_hou.so:
@rpath/Houdini.framework/Versions/16.5.571/Houdini (compatibility version 1.0.0, current version 16.5.255)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1443.14.0)
/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.0.0)
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 22.0.0)
/System/Library/Frameworks/QTKit.framework/Versions/A/QTKit (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox (compatibility version 1.0.0, current version 492.0.0)
/System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.0)
可以使用install_name_tool -change
重写路径。
install_name_tool -change @rpath/Houdini.framework/Versions/16.5.571/Houdini /Applications/Houdini/Houdini16.5.571/Frameworks/Houdini.framework/Versions/16.5.571/Houdini /Applications/Houdini/Houdini16.5.571/Frameworks/Houdini.framework/Versions/Current/Resources/houdini/python2.7libs/_hou.so
使用相对路径可能更好。
我正在尝试使用应用程序附带的 Houdini Python 模块,它是 Houdini 安装文件夹的一部分,位于标准 Python 路径之外。按照安装说明进行操作后,运行 Houdini Terminal 16.5.571 脚本并将 /Applications/Houdini/Houdini16.5.571/Frameworks/Houdini.framework/Versions/Current/Resources/houdini/python2.7libs
添加到 _virtualenv_path_extensions.pth
在我的 site-packages
文件夹中hou
模块可以导入,即 Python 部分。但是它无法加载动态库。
错误信息
Traceback (most recent call last):
File "myscript.py", line 7, in <module>
import hou
File "/Applications/Houdini/Houdini16.5.571/Frameworks/Houdini.framework/Versions/Current/Resources/houdini/python2.7libs/hou.py", line 19, in <module>
import _hou
ImportError: dlopen(/Applications/Houdini/Houdini16.5.571/Frameworks/Houdini.framework/Versions/Current/Resources/houdini/python2.7libs/_hou.so, 2): Library not loaded: @rpath/Houdini.framework/Versions/16.5.571/Houdini
Referenced from: /Applications/Houdini/Houdini16.5.571/Frameworks/Houdini.framework/Versions/Current/Resources/houdini/python2.7libs/_hou.so
Reason: image not found
错误消息中提到的所有文件和文件夹都位于 Houdini 路径 /Applications/Houdini/Houdini16.5.571/Frameworks/Houdini.framework/Versions/Current
中,其中 Current
是 16.5.571
的符号link。
Python模块
Resources/houdini/python2.7libs/hou.py
找到 Python 模块。
共享库
Resources/houdini/python2.7libs/_hou.so`
这包含对 @rpath/Houdini.framework/Versions/16.5.571/Houdini
的引用,它可能正在尝试查找。
Houdini
这似乎 link 到实际的 dylib
文件,包含 @loader_path/Libraries
和 dylib...@rpath/libHoudiniUI
等以及许多其他文件。
我在这里读到 ln -s
共享库进入 /usr/local/lib
之后,错误仍然发生。
我正在使用 pyenv
但尝试使用系统 Python 环境,导致相同的行为。
有什么建议吗?
dyld: Library not loaded ... Reason: Image not loaded 中的答案为我指明了正确的方向,建议使用 otool
重写动态库路径。
列出 _hou.so
加载的所有库,显示以下列表,其中 @rpath/Houdini.framework/Versions/16.5.571/Houdini
是导致问题的库。
otool -L /Applications/Houdini/Houdini16.5.571/Frameworks/Houdini.framework/Versions/Current/Resources/houdini/python2.7libs/_hou.so
/Applications/Houdini/Houdini16.5.571/Frameworks/Houdini.framework/Versions/Current/Resources/houdini/python2.7libs/_hou.so:
@rpath/Houdini.framework/Versions/16.5.571/Houdini (compatibility version 1.0.0, current version 16.5.255)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1443.14.0)
/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.0.0)
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 22.0.0)
/System/Library/Frameworks/QTKit.framework/Versions/A/QTKit (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox (compatibility version 1.0.0, current version 492.0.0)
/System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.0)
可以使用install_name_tool -change
重写路径。
install_name_tool -change @rpath/Houdini.framework/Versions/16.5.571/Houdini /Applications/Houdini/Houdini16.5.571/Frameworks/Houdini.framework/Versions/16.5.571/Houdini /Applications/Houdini/Houdini16.5.571/Frameworks/Houdini.framework/Versions/Current/Resources/houdini/python2.7libs/_hou.so
使用相对路径可能更好。