我有一个.so
文件,其中包含对/Library/Frameworks/Python.framework/Versions/2.7/Python
(我可以在 .so 文件中以纯文本形式硬编码此路径)的引用。我无权访问构建.so
文件的源。
我想使用不同版本的 python 库(存储在 中/opt/local/Library
)。是否可以编辑.so
文件以重新分配此路径?
我有一个.so
文件,其中包含对/Library/Frameworks/Python.framework/Versions/2.7/Python
(我可以在 .so 文件中以纯文本形式硬编码此路径)的引用。我无权访问构建.so
文件的源。
我想使用不同版本的 python 库(存储在 中/opt/local/Library
)。是否可以编辑.so
文件以重新分配此路径?
您可以使用install_name_tool
OS X Xcode 命令行工具中包含的永久更改引用。
install_name_tool -change old-lib-path new-lib-path path-to.so
但是,如果new-path
比原始文件长old-path
,则捆绑文件 (.so) 中的字段中可能没有空间来执行此操作。注意事项man
页面:install_name_tool
为了在安装名称或 rpath 较大时使用此工具,应使用 ld(1) -headerpad_max_install_names 选项构建二进制文件。
此外,无法保证您希望使用的新 Python 的构建方式与 .so 您尝试修改的旧共享库兼容。通用 CPU 架构、OS X 部署目标和 Python 构建选项(例如,UCS-2 与 UCS-4)可能存在差异,这可能会妨碍成功。在尝试修改它之前,您应该制作 .so 的副本。