如何为Project Catalyst构建OpenSSL库?



我必须在为UIKitForMac构建iPad应用程序时在我的项目中支持OpenSSL。 目前,我收到这些错误。

为 UIKit for Mac 构建,但链接库 'libssl.a' 是为独立构建的。您可能需要在目标编辑器中限制应链接此库的平台。

为 UIKit for Mac 构建,但链接库 'libcrypto.a' 是为独立构建的。您可能需要在目标编辑器中限制应链接此库的平台。

我正在阅读有关XCFrameworks的信息,但Apple在这里确实没有发布太多信息。 有没有人想出构建方案?

评论中的解决方案对我不起作用。但是,我只是构建到不同的库:像以前一样构建iOS,并通过添加构建参数来构建Catalyst的另一个库:-target x86_64-apple-ios13.0-macabi并在-isysroot中定义Mac SDK。之后,我只是有条件地为每个构建版本添加每个库,它就可以工作了。

在多次失败的尝试和谷歌搜索之后,我成功地为Catalyst构建了openSSL 1.1.1g,编译了我的项目,链接了openSSL,并通过执行以下操作在我的Mac上启动了该应用程序:

  1. 我使用了之前为IOS提取和构建openSSL的相同目录。
  2. 按照此处的说明,我编辑了<openSSL directory>/Configurations/10-main.conf.向下滚动到"darwin64-x86_64-cc"部分,我添加了第二行CFLAGS

CFLAGS => add("-target x86_64-apple-ios13.0-macabi"),

  1. 在 openSSL 目录中,执行./Configure darwin64-x86_64-cc -shared请注意,我已经看到了此配置语句的其他几个版本,其中一些版本具有更多选项。这个命令对我有用,但我不确定所有其他变体的作用。您可能想进一步研究这一点。

  2. 执行make clean以清除先前IOS构建中的所有对象

  3. 执行make这成功构建了 openSSL。

  4. 在 Xcode 中,在 -> General -> "Frameworks, Libraries and Embedded Content" 下,我删除了 libcrypto.a 和 libssl.a,这是一个关键的步骤

  5. 将选项卡切换到构建阶段 ->将二进制文件与库链接,验证这两个存档也已从此部分中删除。(似乎在步骤 5 中删除它们也在步骤 6 中清除了它们,但我不确定)。

  6. 返回通用>框架,单击+添加新条目,在弹出窗口的左下角选择"添加其他",然后提供新构建的libcrypto.a的路径。对 libssl.a 重复此操作

  7. 删除终端窗口中的派生数据(我不确定这是必要的,但出于谨慎考虑

    ):
cd ~/Library/Developer/Xcode
mv DerivedData DerivedData.old
  1. 在 Xcode 中构建项目。此操作已成功完成。

事实证明,第 5-7 步至关重要。即使我移动和/或完全替换了以前的库,当我尝试在 Xcode 中构建时,我也会收到链接器错误,我正在为 MacOS Catalina 构建,但试图链接为 MacOS x86 构建的内容。

最新更新