Python模块无法加载共享库,原因:找不到图像

时间:2018-09-27 15:39:06

标签: python macos shared-libraries dylib houdini

我正在尝试使用应用程序随附的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的符号链接。

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环境中进行了尝试,导致了相同的行为。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

dyld: Library not loaded ... Reason: Image not loaded中的答案为我指明了正确的方向,建议使用using Newtonsoft.Json;重写动态库路径。

列出public class Item { public int Year { get; set; } public string Name { get; set; } public double Val { get; set; } } public class Program { public static void Main() { string json = "[{\"Year\":2000,\"Name\":\"Ala\",\"Val\":0.5},{\"Year\":2001,\"Name\":\"Ola\",\"Val\":0.6},{\"Year\":2004,\"Name\":\"Ela\",\"Val\":0.8}]"; List<Item> items = JsonConvert.DeserializeObject<List<Item>>(json); foreach(var item in items) { Console.WriteLine("Year: {0}; Name: {1}; Val: {2}", item.Year, item.Name, item.Val); } } } 加载的所有库,显示以下列表,其中Item是导致问题的列表。

otool

可以使用_hou.so完成路径的重写。

@rpath/Houdini.framework/Versions/16.5.571/Houdini

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