【问题标题】:Python module cannot load shared library, Reason: image not foundPython 模块无法加载共享库,原因:找不到图像
【发布时间】:2019-03-03 13:58:18
【问题描述】:

我正在尝试使用应用程序附带的 Houdini Python 模块,它是标准 Python 路径之外的 Houdini 安装文件夹的一部分。按照安装说明运行 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 的符号链接。

Python 模块

Resources/houdini/python2.7libs/hou.py

找到 Python 模块。

共享库

Resources/houdini/python2.7libs/_hou.so`

这包含对@rpath/Houdini.framework/Versions/16.5.571/Houdini 的引用,它可能正在尝试查找。

Houdini

这似乎链接到实际的dylib 文件,包含@loader_path/Librariesdylib...@rpath/libHoudiniUI 等以及许多其他文件。

我在这里读到Cannot find dynamic library when running a Python script from Bazel 说 SIP 可能会导致它,但即使在 ln -s 共享库进入 /usr/local/lib 之后,错误仍然发生。

我正在使用pyenv,但尝试使用系统 Python 环境,导致相同的行为。

有什么建议吗?

【问题讨论】:

    标签: python macos shared-libraries dylib houdini


    【解决方案1】:

    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
    

    使用相对路径可能会更好。

    【讨论】:

      猜你喜欢
      • 2013-12-25
      • 2012-03-20
      • 2013-07-16
      • 1970-01-01
      • 1970-01-01
      • 2020-05-12
      • 2020-01-28
      • 2010-11-30
      • 1970-01-01
      相关资源
      最近更新 更多