我必须在为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上启动了该应用程序:
- 我使用了之前为IOS提取和构建openSSL的相同目录。
- 按照此处的说明,我编辑了
<openSSL directory>/Configurations/10-main.conf
.向下滚动到"darwin64-x86_64-cc"
部分,我添加了第二行CFLAGS
:
CFLAGS => add("-target x86_64-apple-ios13.0-macabi"),
-
在 openSSL 目录中,执行
./Configure darwin64-x86_64-cc -shared
请注意,我已经看到了此配置语句的其他几个版本,其中一些版本具有更多选项。这个命令对我有用,但我不确定所有其他变体的作用。您可能想进一步研究这一点。 -
执行
make clean
以清除先前IOS构建中的所有对象 -
执行
make
这成功构建了 openSSL。 -
在 Xcode 中,在 -> General -> "Frameworks, Libraries and Embedded Content" 下,我删除了 libcrypto.a 和 libssl.a,这是一个关键的步骤
-
将选项卡切换到构建阶段 ->将二进制文件与库链接,验证这两个存档也已从此部分中删除。(似乎在步骤 5 中删除它们也在步骤 6 中清除了它们,但我不确定)。
-
返回通用>框架,单击
+
添加新条目,在弹出窗口的左下角选择"添加其他",然后提供新构建的libcrypto.a的路径。对 libssl.a 重复此操作 -
删除终端窗口中的派生数据(我不确定这是必要的,但出于谨慎考虑
):
cd ~/Library/Developer/Xcode mv DerivedData DerivedData.old
- 在 Xcode 中构建项目。此操作已成功完成。
事实证明,第 5-7 步至关重要。即使我移动和/或完全替换了以前的库,当我尝试在 Xcode 中构建时,我也会收到链接器错误,我正在为 MacOS Catalina 构建,但试图链接为 MacOS x86 构建的内容。