gpt4 book ai didi

macos - 如何分发带有依赖库的 Mac OS X?

转载 作者:行者123 更新时间:2023-12-03 20:22:06 27 4
gpt4 key购买 nike

我有一个程序(特别是我的 SO DevDays Countdown app challenge 条目),它依赖于几个动态库,即 libSDL、libSDL_ttf 等。我在 /opt/local/lib 下安装了这些库通过 MacPorts,许多人不会安装这些(有些人可能安装了它们,但不在那个位置)。

我如何分发我的程序,以便没有安装这些库的人可以开箱即用地运行它?显然我必须分发各种 .dylib文件,但这样做是不够的。动态加载器仍会查找安装在我安装它们的位置的库。有没有办法告诉动态加载器查看可执行文件的当前目录,就像 Windows 对 DLL 所做的那样?人们不应该修改任何环境变量(例如 DYLD_LIBRARY_PATH ),因为我再次希望它开箱即用。

最佳答案

对此的基本方法是将它们放在 .app 包中。然后,您将修改链接器查找共享库的位置以包含该位置。

步骤是:

  • 创建一个新的复制文件构建阶段到您的目标,将这些文件复制到 .app 包的 Frameworks 目录中。
  • 编辑构建配置设置“运行路径搜索路径”以包含 @executable_path/../Frameworks

  • 如果您使用这些更改构建可执行文件,然后查看,您应该会发现 dylib 存在于 Foo.app/Contents/Framework 中。目录和运行 otool -L Foo.app/Contents/MacOS/Foo应该为这些 dylib 生成并以 @rpath 为前缀的条目。

    从这里 Cocoabuilder post :

    一般来说, @loader_path优于 @executable_path , 作为
    允许嵌入式框架在可执行文件和包中工作,
    插件或子框架。唯一的缺点是 @loader_path需要 10.4 或更高版本。如果您使用的是 10.5 或更高版本, @rpath甚至
    优于 @loader_path .

    关于macos - 如何分发带有依赖库的 Mac OS X?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1482682/

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