首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于iOS崩溃的带有openssl的libwebsockets ()

用于iOS崩溃的带有openssl的libwebsockets ()
EN

Stack Overflow用户
提问于 2013-10-17 13:34:00
回答 2查看 1.8K关注 0票数 1

我试图在我的应用程序中使用libwebsocket (http://libwebsockets.org/trac/libwebsockets)库来支持websockets。我需要它是安全的,所以我尝试用openssl构建它,我使用https://github.com/x2on/OpenSSL-for-iPhone/blob/master/build-libssl.sh脚本构建了openssl。CMake创建了libwebsockets项目,我稍微修改了这个项目,以使用静态openssl库。然后我将这个项目添加到我的工作区并构建我的应用程序。应用程序的构建没有问题。当我启动它并尝试建立websocket连接时,当我尝试使用SHA1_Final ()创建新的上下文时,SSL_CTX_new函数就会崩溃。

代码语言:javascript
复制
* thread #1: tid = 0x2503, 0x000fa47e MyApp`SHA1_Final + 22, queue = 'com.apple.main-thread, stop reason = EXC_BAD_ACCESS (code=1, address=0x22986341)
frame #0: 0x000fa47e MyApp`SHA1_Final + 22
frame #1: 0x00130a90 MyApp`EVP_DigestFinal_ex + 56
frame #2: 0x0012e45c MyApp`ssleay_rand_add + 492
frame #3: 0x0012f056 MyApp`RAND_poll + 614
frame #4: 0x0012e726 MyApp`ssleay_rand_bytes + 166
frame #5: 0x000ef49c MyApp`SSL_CTX_new + 464
frame #6: 0x00153218 MyApp`libwebsocket_create_context(info=0x2fda90bc) + 1364 at libwebsockets.c:1975

我还拥有nss库(https://developer.mozilla.org/en-US/docs/NSS)和一些其他与安全相关的文件,这些文件是我项目中其他库所需要的。

我尝试用一个视图创建简单的测试项目,其中只有libwebsocket和openssl库,而在该项目中,openssl不会崩溃。

我猜想,我遇到的问题要么与同一个项目中存在的nss和openssl库有关,要么与openssl和其他项目可能存在的不同编译设置有关。(是的,我已经检查过,libwebsockets调用了SSL_library_init())。

我将非常感激任何想法,为什么会发生这种情况,以及如何解决它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-22 08:05:10

好的。我已经解决了这个问题。

NSS库具有与openssl相同的名称的SHA1函数。我不完全理解为什么链接器没有抱怨重复的符号,但问题是openssl使用的是来自NSS的SHA1函数之一,以及来自openssl的所有其他函数。通过这样做,ssl上下文被来自NSS的错误函数破坏,然后在openssl函数中崩溃。

我很想知道为什么链接器会让它全部编译,但是将所有的应用程序只使用openssl解决了我的问题。

票数 2
EN

Stack Overflow用户

发布于 2015-08-27 18:02:02

这背后的原因是,来自其他链接器标志的-objC允许从静态库导入所有目标c类别,这里它与openssl冲突。如果您删除该标志,那么它将使用openssl进行链接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19428216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档