gpt4 book ai didi

xcode - 创建 OpenSSL Framework 时某些体系结构的 undefined symbol

转载 作者:搜寻专家 更新时间:2023-10-31 22:48:10 25 4
gpt4 key购买 nike

我正在为 OSX/iOS 开发一个 Swift 框架。我需要生成 RSA key 并导出它们,而安全框架不允许在 iOS 上巧妙地执行此操作,因此我将使用 OpenSSL。

我检索到为两个平台构建 OpenSSL 的脚本 (https://gist.github.com/6710405)。它可以完美地工作并为每个平台生成 libcrypto.alibssl.a 和相应的 header 。

我想将 OpenSSL 放在自己的框架中,并定义一个模块以便在 Swift 中轻松使用它。

为了简单起见,我们只限于 OSX。我创建了一个名为 OpenSSL 的新框架项目。我链接了这两个库并添加了所有标题(作为公共(public)标题)。我还添加了一个“复制文件”阶段,我在其中复制并签署了两个库。我创建了一个 .modulemap 文件:

framework module OpenSSL {

header "rc2.h"
header "rc4.h"

header "aes.h"
[…]
header "x509v3.h"

header "dtls1.h"

export *
}

列出了 OpenSSL 的所有 header 。我最初按字母顺序对标题进行排序,但一些 #undef 导致了问题,所以我不得不重新排序一些标题并编译(我根本不喜欢这样!)。

回到原来的框架,我添加了我的 OpenSSL 框架,导入了 OpenSSL 模块并写了几行:

import OpenSSL

func generateKeyPair() -> RSAKeyPair? {
var exponent = BN_new();
BN_set_word(exponent, 65537);
var rsa = RSA_new()
RSA_generate_key_ex(rsa, 2048, exponent, nil)
[…]
}

代码由查看模块 header 的 Xcode 完成。当我尝试编译时,它会为某些(但不是全部)OpenSSL 调用生成一些 Undefined symbols for architecture x86_64:。例如,它提示 RSA_generate_key_ex 而不是 BN_set_wordRSA_new() (在 RSA_generate_key_ex< 之前的几行声明)/)。它不仅对 RSA_generate_key_ex 失败,而且稍后其他一些调用也因同样的错误而失败。

我已经建立了一个 playground 来检查这个。某些对 RSA_new() 的调用正在返回内容,但 playground 无法找到 RSA_generate_key_ex 的符号。

我快速建立了一个新的 Objective-C 项目,以经典方式添加了库和 header ,并且相同的代码(在 ObjC 中)编译和运行没有问题。因此,我确信这些库是用所有需要的架构构建的(我用 otool 仔细检查过)。

我的框架出了点问题。我试图删除/添加“复制文件”阶段但没有成功。我对制作 .modulemap 文件的方式不满意,但我看不出它会在哪里导致此类问题。我不是框架制作方面的专家,所以也许有人知道会发生什么以及如何修复它?

最佳答案

我自己找到了解决方案。像往常一样,旧的 -all_load 标志需要作为框架中的“其他链接器标志”。

此外,库不需要复制阶段。将它们链接起来似乎就足够了。

关于xcode - 创建 OpenSSL Framework 时某些体系结构的 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33587292/

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