在 XCode 中静态链接 OpenSSL

2024-04-30

我正在尝试链接libssl.a and libcrypto.aXCode 命令行项目中的静态库 [在 Link Binary With Libraries 下]。我已在搜索路径中包含 Openssl 头文件。

编译成功但执行失败dyld: Library not loaded: /usr/local/ssl/lib/libcrypto.1.0.0.dylib.

当我静态链接它时,为什么它会查找 dylib?如何解决这个问题?

任何帮助将不胜感激。


当我静态链接它时,为什么它会查找 dylib?如何解决这个问题?

Apple 的链接器使用 dylib 或共享对象(如果可用),无论您的链接器标志如何,例如-rpath and -Bstatic。他们甚至在 iOS 上做到了这一点,而 dylib 是不允许的!

一旦你了解了它,它就是一个众所周知的问题:) 例如,参见,在 Mac OS X 上安装 Crypto++ 5.6.2 https://stackoverflow.com/a/25733194/608639。 Crypto++ 与苹果的工具也有同样的问题。

解决方法是stop using -L and -l选项,并直接链接目标文件或存档。存档只是目标文件的集合,因此您可以互换使用它们。

要指定链接器的目标文件或存档,请参阅链接到目标文件 http://www.cocoabuilder.com/archive/xcode/264949-linking-to-an-object-file.html。在 Xcode 下,您添加完全指定的存档名称(例如/usr/local/openssl-ios/lib/libcrypto.a) to 其他链接器标志 (the OTHER_LDFLAGS https://developer.apple.com/library/ios/documentation/DeveloperTools/Reference/XcodeBuildSettingRef/1-Build_Setting_Reference/build_setting_ref.htmlXcode 选项)。

将完整存档添加到时OTHER_LDFLAGS,我相信你只是逐字添加它without任何开关,例如-l or -L. You may need -Wl (-Wl,/usr/local/openssl-ios/lib/libcrypto.a), 但是你don't use -l (-l/usr/local/openssl-ios/lib/libcrypto.a).

You use -Wl当选项通过编译器驱动程序传递到链接器时。如果直接调用链接器,则不需要-Wl并且不应该使用它。


第二个选项是设置GCC_LINK_WITH_DYNAMIC_LIBRARIES to YES。苹果似乎没有在其中记录它Xcode 构建设置参考 https://developer.apple.com/library/ios/documentation/DeveloperTools/Reference/XcodeBuildSettingRef/1-Build_Setting_Reference/build_setting_ref.html,但它显然位于我的 Xcode 副本下。看如何链接 iOS 的静态库 https://stackoverflow.com/q/11064984/608639在堆栈溢出上。

我似乎记得过去曾遇到过这个问题。这是理论上应该起作用但在实践中不起作用的事情之一。


第三个选项是从 Xcode 下使用的所有路径中删除 dylib 或共享对象,以便 Xcode 在使用时不会意外找到它-lcrypto.


第四个选项是使用允许动态链接,但执行程序DYLD_LIBRARY_PATH https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/dyld.1.html。它的 OS X 相当于LD_LIBRARY_PATH,并确保加载您的 OpenSSL 副本(如 1.0.2),而不是系统版本的 OpenSSL (0.9.8)。

但我不喜欢这个选项,因为它要求你的软件的用户做一些事情。


另一种可能性是由于消息dyld: Library not loaded: /usr/local/ssl/lib/libcrypto.1.0.0.dylib是对您的库副本进行代码签名。它找到了但没有加载,这有点奇怪,所以我要把它扔掉,以防它的 OS X代码签名 https://developer.apple.com/library/mac/documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html or 网守服务 https://support.apple.com/en-us/HT202491...

要在 MAC Developer 程序下对库副本进行代码签名,只需:

codesign -fs "Johnny Developer" /usr/local/ssl/lib/libcrypto.so
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 XCode 中静态链接 OpenSSL 的相关文章

  • 所有针对 iTunes Connect 的构建,导入此构建时出错 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我将构建上传到应用程序商店 之后它在活动中显示错误 任何人都可以帮帮我 SOLVED 转到构建设置 gt 搜索 bitcode gt 转启
  • 断点条件错误

    我已经根据条件设置了断点 event name isEqualToString Some Name 这很好用 但是 当我尝试添加另一个带有条件的断点时 part name isEqualToString Some Value With A
  • 制作已准备好开发人员 ID 的 macOS 安装程序包

    注意 这是为了OS X 安装程序 https en wikipedia org wiki Installer macOS 仅包 提交到的包Mac 应用商店 https en wikipedia org wiki Mac App Store遵
  • 更改导航项(栏)的背景颜色

    有没有一种简单的方法可以更改视图顶部导航项的背景颜色 我有一个基于导航的应用程序 我只希望一个视图获得另一种背景颜色 我主要使用 IB 创建视图 我找到了以下解决方案 未测试 float r 10 float g 55 float b 13
  • 删除派生数据文件夹后,Xcode 不断重新创建派生数据文件夹

    自动完成功能在 Xcode 6 中不再起作用 我四处搜索 发现删除派生数据文件夹可以解决此问题 每次我删除它时 它都会回来 然后就不会再自动完成了 有什么建议么 Thanks 没关系 我解决了这个问题 我没有声明需要在类内的方法中使用的变量
  • 如何重新定位或移动 Google Maps SDK 上的当前位置按钮?

    如何将 Objective C 中的当前位置按钮移至我的偏好 现在 我已启用它 但底角有东西挡住了它 Thanks 您可以使用 padding 将按钮向上移动 self mapView padding UIEdgeInsets top 0
  • Xcode 10 Beta 5 — clang:错误:链接器命令失败,退出代码为 1

    有人可以帮我吗 我的项目一切正常 但更新到 Xcode10 Beta5 后 尝试在 iPhone 上运行该应用程序时出现此错误 然而模拟器可以工作 请帮助我 我已经对这个问题进行了网络搜索并发现this https stackoverflo
  • NSManagedObject 的 Xcode 9 构建问题:Date 与 NSDate

    Xcode 9 生成不同的代码Date模拟器与设备中实体的类型属性 我有codegen功能下Class set to category extension在核心数据中 直到 Xcode 8 3 最新 一切都工作正常 NSDate总是 下面是
  • 无法使用 OpenSSL 验证服务器证书

    我已经使用 OpenSSL 编写了一个 SOAP 客户端 在 Ubuntu 12 04 上用 C 编写 但它目前无需检查服务器安全证书即可运行 这是我用来设置连接和检查证书的函数 bool bInitialiseSSL SSL CTX ct
  • ui 测试 xcode,如何使用 cellquery 点击表视图单元格按钮

    我目前正在为我的应用程序进行 ui 测试 并一直点击我的应用程序的登录按钮 我无法找到我提供了标识符注册按钮的元素 该元素是索引中的第三个 这不是问题 let cellQuery self app tables cells element
  • 如何测试 UITextField 是否为零?

    我正在尝试制作我的应用程序的一部分 如果该人不更改我的 UITextField 中的空白文本 那么他 她将无法继续下一步 基本上 我想测试 UITextField 的 nil 文本 我已经使用了 if text 方法 但是如果用户单击 UI
  • 如何在 ios 7 上更改重新排序控制图像

    我正在寻找一种更改重新排序控件图像和大小的方法 我使用此代码来更改重新排序图像 void tableView UITableView tableView willDisplayCell UITableViewCell cell forRow
  • 暂停视频录制[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试创建一个应用程序 用户可以在其中从相机录制视频 该应用程序的功能之一必须是文件录制中的暂停 例如 用户通过按 开始 按钮开始
  • 我们可以从 LinkPresentation 框架中的 LPLinkView 中提取图像吗?

    我想在我的应用程序中呈现丰富的链接 并将这些数据发送到我的服务器 我需要访问视图内的图像LPLinkView https developer apple com documentation linkpresentation lplinkvi
  • 无法转换“UINavigationController”类型的值

    我正在为我的应用程序实现一个搜索界面 因此基本上我会将搜索关键字从一个 ViewController 传递到另一个 ViewController 我已经多次进行过这种类型的参数传递 但这次似乎有些奇怪 目标 ViewController 嵌
  • Xcode 3.1.4 中内置分析器

    我想知道 Xcode 3 1 4 中内置的分析器是否使得单独使用 LLVM Clang 静态分析器变得多余 请参考这里的原文 使用 LLVM Clang 静态分析器查找内存泄漏 http www fruitstandsoftware com
  • xcode 6.1 (Swift) 中的 SIGABRT 运行时错误

    与最初的代码相比 唯一的更改是在ViewControl swift override func viewDidLoad newMessage hidden true super viewDidLoad Do any additional s
  • 无法读取序列化诊断文件:无效文件:无效诊断签名

    我收到这个奇怪的警告 我不确定是什么原因造成的 A dia https filext com file extension DIA文件扩展名据称表示核心有向图图形文件 我没有添加一个 该应用程序几乎没有用户界面 无法读取序列化诊断文件 错误
  • gdb 声称它不知道如何运行

    我在 Mac Pro 上的 Mac OS X 10 6 6 上使用 Xcode 3 2 3 来构建 GrowlTunes 的修订版 5fd480ef577f咆哮开发存储库 http growl info hg growl developme
  • 无法将 /root/.rnd 加载到 RNG 中

    我想使用 Windows Open SSL 生成服务器证书 当我运行此命令行时 出现此错误 我应该怎么办 Command openssl req new x509 days 3650 key ca key out ca crt Error

随机推荐

  • 访问单个结构体成员是否会将整个结构体拉入缓存?

    我一直在读乌尔里希 德雷珀的书 每个程序员都应该了解的内存知识 http lwn net Articles 250967 并在部分3 3 2 缓存效果的测量 http lwn net Articles 252125 页面中间 它给我的印象是
  • 在 TFS 构建过程中运行 WatiN 测试时出现超时问题

    我已经在我的开发环境中运行了一个简单的 WatiN Web 测试 并尝试让它在 TFS 构建服务器上运行 尝试加载页面时失败 但出现以下异常 WatiN Core Exceptions TimeoutException Internet E
  • 在 spring mvc 环境中使用查询使用 ajax 调用的结果填充列表框选项。

    目前 我正在处理我的第一个 jquery ajax 调用 并且在如何将服务器端结果填充到我的列表框中时遇到问题 spring 控制器正确地返回数据 希望如此 我只是在填充列表框时遇到了 jquery 部分的问题 这是我的 ajax 调用 f
  • 注销后重定向设备

    在用户注销后 使用 Devise 将用户重定向回当前所在页面的最佳做法是什么 The 设计文档 https github com plataformatec devise wiki How To 3a Change the redirect
  • 使用 CSV 文件填充下拉列表 - d3

    我想在 html 中填充简单的下拉列表 使用 csv 文件中存在的值 我尝试类似的方法 但它不起作用
  • 如何检查用户是否从“设置”返回

    我正在向我的用户发送本地通知 并且我想在通知设置按钮上显示相关标题 如果本地通知关闭 则此标题应为 通知 关闭 如果本地通知打开 则此标题应类似于 首选项 现在我正在 viewDidLoad 和 viewDidAppear 中检查它 它有效
  • 递归和迭代的速度性能 – 为什么它们对于不同的“小”数都以相同的速度运行?

    我正在尝试优化我拥有的代码 为了做到这一点 我编写了这段代码来查看递归与迭代的效果 该代码 计数 到 10 的 n 次方 public Form1 InitializeComponent Stopwatch sw new Stopwatch
  • 设置 datetime-local 的默认时间值

    我使用这个 html 标签作为日期时间选择器
  • Cocoa 自动布局约束 - 以编程方式填充可变数量的视图

    我希望能够向超级视图添加新视图 但使它们彼此之间保持恒定的垂直距离 为此 我尝试以编程方式为每个视图设置约束 但我不知道如何做到这一点 问题是我事先不知道视图的数量或相对位置 有没有一种方法可以以编程方式为每个视图设置约束 以便无论它们相邻
  • 将 geom_path 和 geom_text 添加到同一 ggplot 会在 r 中生成错误

    我正在同一个 ggplot 中绘制 geom path 对象和 geom text 对象 但遇到以下问题 load the data frames df1 lt data frame x c 32 42 52 y c 15 20 25 gr
  • 在 C# 中的 RESTfull/HTTP 请求中添加标头和发布数据

    我在 C 中发送 POST 请求时遇到问题 似乎我误解了一些 HTTP 基础知识 所以基本上我正在实施 RESTfull 服务client 其工作原理如下 使用用户名 密码发出 POST 请求并获取令牌 在发出其他 GET POST PUT
  • RemoteViews 支持的方法

    我正在尝试将值转发到 Android RemoteView 某些值可以通过使用反射的 set 方法转发 例如背景颜色的工作原理 rv setInt R id viewId setBackgroundColor 0xffff0000 尽管该机
  • 如何在 JavaScript 中将随机对象文本插入到 DOM 中?

    我正在为表单输入字段制作自定义类包装器 这些字段内部包含 DOM 节点 并通过额外的功能方法进行增强 我的问题是是否有与 toString 类似的方法用于附加到 DOM 因为我想直接将对象插入到 DOM 而不是调用其他方法 换句话说 这是我
  • Django 可重用应用程序配置

    我有一些连接到数据库的 Django 中间件代码 我想将中间件变成可重用的应用程序 app 这样我就可以将其打包以分发到许多其他项目中 而无需复制和粘贴 我不明白可重用应用程序应该在哪里配置自身 由于它是用于重新分发的 所以我无法自己编写中
  • Python:从自定义域发送电子邮件

    我正在尝试从 Python 中的自定义域发送电子邮件 我已经弄清楚如何使用 smtplib 从其他域 例如 gmail com 发送电子邮件 示例代码 https stackoverflow com questions 57842922 c
  • 我们可以从 MFCC 系数中恢复音频吗?

    可以从 MFCC 系数中获取音频信号吗 另外 MFCC 系数是否有一个值范围 如果有的话 是什么 如果没有 如何将其归一化在 0 到 1 之间 我尝试使用以下 MATLAB 代码 http labrosa ee columbia edu m
  • 如何在代码中使用毕加索设置背景图像

    我知道毕加索将图像加载到 imageview 等中 但如何使用毕加索设置布局背景图像 My code public class MainActivity extends ActionBarActivity Override protecte
  • 在 dplyr::filter 中传递字符串作为变量名

    我使用 mtcars 数据集来说明我的问题 例如 我想将数据子集到 4 缸汽车 我可以这样做 mtcars gt filter cyl 4 在我的工作中 我需要传递一个字符串变量作为我的列名 例如 var lt cyl mtcars gt
  • 在 C# 中将字符串转换为类型[重复]

    这个问题在这里已经有答案了 如果我收到一个包含类名称的字符串 并且我想将该字符串转换为真实类型 字符串中的类型 我该怎么做 I tried Type GetType System Int32 例如 它似乎有效 但是当我尝试使用自己的对象时
  • 在 XCode 中静态链接 OpenSSL

    我正在尝试链接libssl a and libcrypto aXCode 命令行项目中的静态库 在 Link Binary With Libraries 下 我已在搜索路径中包含 Openssl 头文件 编译成功但执行失败dyld Libr