跳转到主要内容

OSX库重定位工具

项目描述

安装

pip install osxrelocator

用法

osxrelocator.py [选项] 目录 old_prefix new_prefix

描述

在 Darwin 操作系统中,动态链接器不会通过它们的叶名定位依赖的动态库,而是使用完整路径,这使得它们的位置更难移动,如 dyld man 页的 DYNAMIC LIBRARY LOADING 部分所述。

> 与许多其他操作系统不同,Darwin 不会通过它们的叶文件名定位依赖的动态 > 库。相反,每个 dylib 的完整路径 > 都被使用(例如,/usr/lib/libSystem.B.dylib)。但有时使用完整路径 > 并不合适;例如,可能希望您的二进制文件可以在 > 磁盘的任何位置安装。

我们可以使用 otool 获取用于定位其依赖动态库的对象文件所使用的路径列表。

$ otool -L /Library/Frameworks/GStreamer.framework/Commands/gst-launch-0.10
/Library/Frameworks/GStreamer.framework/Commands/gst-launch-0.10:
 /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 550.43.0)
 /Library/Frameworks/GStreamer.framework/Versions/0.10/x86/lib/libgstreamer-0.10.0.dylib (compatibility version 31.0.0, current version 31.0.0)
 /Library/Frameworks/GStreamer.framework/Versions/0.10/x86/lib/libxml2.2.dylib (compatibility version 10.0.0, current version 10.8.0)

此完整路径是从动态库的 安装名 中提取的,这是一个链接器用于确定其位置的路径。可以使用 otool 获取库的安装名。

$ otool -D /Library/Frameworks/GStreamer.framework/Libraries/libgstreamer-0.10.dylib
/Library/Frameworks/GStreamer.framework/Libraries/libgstreamer-0.10.dylib:
/Library/Frameworks/GStreamer.framework/Versions/0.10/x86/lib/libgstreamer-0.10.0.dylib

任何链接到动态库 gstreamer-0.10 的对象文件都将使用路径 /Library/Frameworks/GStreamer.framework/Versions/0.10/x86/lib/libgstreamer-0.10.0.dylib 来定位它。

由于仅使用完整路径无法让我们在路径的任何位置安装我们的二进制文件,链接器提供了一种字符串替换机制,添加了三个可以用作路径前缀的变量。在运行时,链接器将用生成的路径替换它们。这些变量是 @executable_path@loader_path@rpath,在 dyld man 页的 DYNAMIC LIBRARY LOADING 部分中有详细说明。

对于我们的目的,我们将使用 @executable_path 变量,它被替换为一个固定路径,即包含主可执行文件的目录的路径:`/Applications/MyApp.app/Contents/MacOS`。由于 @loader_path 变量在我们的范围内无法使用,因为它将被替换为包含加载动态库的 mach-o 二进制的目录的路径,这可能是可变的。

因此,为了重新定位 SDK,我们需要将所有包含 /Library/Frameworks/GStreamer.framework/ 的路径替换为 @executable_path/../Frameworks/GStreamer.framework/,这可以使用 install_name_tool 工具完成。

项目详情


下载文件

下载适用于您的平台文件。如果您不确定要选择哪一个,请了解更多关于 安装包 的信息。

源分布

osxrelocator-1.0.1.tar.gz (4.9 kB 查看哈希值)

上传时间

构建分布

osxrelocator-1.0.1-py2.py3-none-any.whl (7.4 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者