1

我有一个.so文件,其中包含对/Library/Frameworks/Python.framework/Versions/2.7/Python(我可以在 .so 文件中以纯文本形式硬编码此路径)的引用。我无权访问构建.so文件的源。

我想使用不同版本的 python 库(存储在 中/opt/local/Library)。是否可以编辑.so文件以重新分配此路径?

4

1 回答 1

3

您可以使用install_name_toolOS 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 的副本。

于 2012-11-09T23:44:55.397 回答