如何为Project Catalyst构建OpenSSL库?

时间:2019-06-05 10:51:51

标签: ios macos ipad openssl uikit

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

  

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

     

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

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

2 个答案:

答案 0 :(得分:1)

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

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

CFLAGS => add(“-target x86_64-apple-ios-13.0-macabi”),

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

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

  3. 执行make,此操作成功构建了openSSL。

  4. 在Xcode中->常规->“框架,库和嵌入式内容”下,我同时删除了libcrypto.a和libssl.a。这是关键步骤

    < / li>
  5. 将选项卡切换到“构建阶段”->“使用库链接二进制文件”,还要验证是否已从此部分中删除了两个归档文件。 (似乎在第5步中将其删除在第6步中也将其清除,但我不确定)。

  6. 回到General-> Frameworks,单击+添加新条目,在弹出窗口的左下角选择“添加其他”,然后提供新建libcrypto的路径。一种。对libssl.a重复

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

cd ~/Library/Developer/Xcode
mv DerivedData DerivedData.old
  1. 在Xcode中构建项目。这成功完成了。

步骤5-7至关重要。即使我移动和/或完全替换了以前的库,当我尝试在Xcode中进行构建时,我也会收到为MacOS Catalina构建的链接器错误,但尝试链接为MacOS x86构建的某些链接。

答案 1 :(得分:0)

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