gpt4 book ai didi

c++ - MacOSX : How to collect dependencies into a local bundle?

转载 作者:IT老高 更新时间:2023-10-28 21:43:34 26 4
gpt4 key购买 nike

我正在创建一个依赖于其他几个库的插件应用程序 (dylib)。这些其他库安装在我的系统上,但不保证安装在任何用户的系统上。所以我需要找到一种方法将依赖项与我的应用程序捆绑在一起。

我发现我可以使用 otool 列出或更改其他 dylib 的路径。这将允许创建一个文件夹来捆绑我的插件应用程序和所有需要的依赖项。

但是,手动执行此操作似乎是一项耗时且愚蠢的任务。是否有可用于自动化的实用程序?

或者也许我做错了,有更好更明显的方法来解决这个问题?

编辑我创建了一个 script自动完成大部分任务。

最佳答案

使用 install_name_tool 在你的 dylib 中使用相对路径。这样您就可以设置它们一次,然后将该目录安装在任何地方,而无需在安装时修改您的库。

您应该将所有 dylib 依赖项放在一个文件夹中,然后使用 install_name_tool 设置您所依赖的其他 dylib 的相对位置。假设你的库 libmyfoo.dylib 依赖于 libbar.dylib:

install_name_tool -change "/Whatever/full/path/libbar.dylib" "@loader_path/libbar.dylib" libmyfoo.dylib

这样,您的库将始终在 libmyfoo.dylib 所在的同一目录中查找 libbar.dylib。

如果它们相互依赖,您可能还需要在其他一些 dylib 上运行 install_name_tool。

注意,install_name_tool 的文档指出“要使此工具在安装名称或 rpath 较大时工作,应使用 ld(1) -headerpad_max_install_names 选项构建二进制文件。”,因此请务必包含 -headerpad_max_install_names 命令构建库时的行选项。

@loader_path 相对于用于加载 dylib 的二进制文件,在本例中是您的 libmyfoo.dylib。如果要查找与启动库加载序列的可执行文件相关的库,请使用 @executable_path

关于c++ - MacOSX : How to collect dependencies into a local bundle?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2092378/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com