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