Sta*_*ked 13 c++ deployment macos otool
我正在创建一个依赖于其他几个库的插件应用程序(dylib).这些其他库安装在我的系统上,但不保证安装在任何用户的系统上.所以我需要找到一种方法将依赖项与我的应用程序捆绑在一起.
我发现我可以otool用来列出或更改其他dylib的路径.这将允许创建一个文件夹,捆绑我的插件应用程序和所有需要的依赖项.
但是,手动执行此操作似乎是一项耗时且愚蠢的任务.是否有可用于实现自动化的实用程序?
或许我做错了,这个问题有更好更明显的方法吗?
编辑 我创建了一个自动完成大部分任务的脚本.
Chr*_*uns 14
使用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
Run Code Online (Sandbox Code Playgroud)
这样,您的库将始终在libmyfoo.dylib所在的同一目录中查找libbar.dylib.
如果它们彼此依赖,您可能还需要在其他一些dylib上运行install_name_tool.
请注意,install_name_tool的文档指出"当安装名称或路径较大时,为了使此工具正常工作,应使用ld(1)-headerpad_max_install_names选项构建二进制文件."所以一定要在-headerpad_max_install_names命令行选项中包含命令行选项.建立你的图书馆.
@loader_path是相对于用于加载dylib的二进制文件,在本例中是你的libmyfoo.dylib.使用@executable_path,如果你想找到相对于启动该库加载程序可执行文件的库.