我正在尝试为 x86_64 和 arm64 架构构建一个 MacOS 应用程序。 我还将它与我在两种架构中拥有的一些 .dylib 库链接起来。 在 XCode 中,我想我可以在
Build Settings
中设置搜索路径:Runpath Search Path
和 Library Search Path
。
但是,当我为两种架构构建时,它会显示此类消息:
ld:警告:忽略文件 /path/to/lib.x86_64/libtorch.dylib,构建 macOS-arm64 但尝试链接为 macOS-x86_64 构建的文件
因此,如果我移动
Build Settings
中路径的优先级,那么它会显示
ld:警告:忽略文件 /path/to/lib.arm64/libtorch.dylib,构建 macOS-x86_64 但尝试链接为 macOS-arm64 构建的文件
它似乎并没有尝试从设置中的路径列表中查看另一个文件。
那么,我如何告诉它针对不同的架构构建链接不同的 dylib?
(我可以看到这些路径可以为“调试”和“发布”单独设置,但不能按架构单独设置。我还发现将
Build Settings
从“组合”切换到“级别”会显示一个包含更多选项的配置矩阵,但我不知道如何导航。)
我想出了这个策略。我不确定这是否是 xcode 项目的“推荐方法”(我通常不会在 xcode 上构建),但这对我有用。
您可以在项目中创建2个目标。最简单的方法就是复制现有目标(右键单击目标 > 复制)。 一旦有了副本,您就可以重命名它并更改单个库搜索路径(或任何其他设置,包括构建阶段中的自定义脚本)。我认为,如果您使用 .dylib 打包应用程序,则需要这样做。
Contents/Frameworks/
文件夹)。这样,您就可以拥有 2 个目标,它们具有不同 .dylib 文件的不同路径(以及可能不同的其他设置)。
现在,为了使构建过程“一点”更加“无缝”,您可以创建 2 个额外的 Debug 和 Release 方案,并指向为新目标构建的新方案。
例如,对我来说,我有2个目标:
和4个方案:
希望这有帮助!