C++ 链接两个使用openssl的库 平台:GNU/Linux Debian蚀刻32b libcurl 7.37.1 qt 4.8.1 openssl 0.9.8

C++ 链接两个使用openssl的库 平台:GNU/Linux Debian蚀刻32b libcurl 7.37.1 qt 4.8.1 openssl 0.9.8,c++,openssl,qt4,libcurl,C++,Openssl,Qt4,Libcurl,上面是一个模式,其中包含我的应用程序的依赖项(仅此问题中涉及的一个) < >我的C++应用程序是基于Qt4.81的,但是对于某些HTTP/网络操作,我们使用LILCURL。 这两个lib都是使用ssl支持编译的 我面临一个非常奇怪的错误场景: Object1对https站点运行curl\u easy\u perform()。呼叫报告错误。curl\u error\u缓冲区包含: 设置证书验证位置时出错:CAfile: /etc/ssl/certs/ca-certificates.crt CA

上面是一个模式,其中包含我的应用程序的依赖项(仅此问题中涉及的一个)

< >我的C++应用程序是基于Qt4.81的,但是对于某些HTTP/网络操作,我们使用LILCURL。 这两个lib都是使用ssl支持编译的 我面临一个非常奇怪的错误场景:

  • Object1对https站点运行curl\u easy\u perform()。呼叫报告错误。curl\u error\u缓冲区包含:
设置证书验证位置时出错:CAfile: /etc/ssl/certs/ca-certificates.crt CApath:无

  • 稍后,Object2调用QSslSocket.write()
第二个调用生成一个QTcpError。 QSslSocket报告的错误字符串为:

TCP Error: Error while reading: error:02001002:system library:fopen:No such file or directory, error:2006D080:BIO routines:BIO_new_file:no such file, error:0B084002:x509 certificate routines X509_load_cert_crl_file:system lib 
两个对象都位于同一个应用程序线程中

使用gdb跟踪应用程序行为看起来像:

  • X509\u load\u cert\u crl\u file调用在curl\u easy\u perform()中执行
  • 调用方法QSslSocket.write()时,不会调用函数:X509\u load\u cert\u crl\u file,除非SSL堆栈返回到qt网络堆栈,否则会出现上述错误
我的想法是SSL库状态在某种程度上是全局的(即errno)和/或在两个库(qt和libcurl)之间共享的,并且执行QSslSocket.write()我们得到了之前由libcurl调用设置的错误状态

  • 这有什么意义吗
  • 我以错误的方式使用libcurl,因此它使ssl连接处于不一致的状态
请注意,qt write方法实际上在内部执行套接字的写入和读取。之后,使用ssl\u get\u error检查ssl的状态


(这里的Qt代码:)

使用相同的ssl重建了这两个库?@deW1:我不确定我是否正确回答了这个问题:你问我是否使用相同的libssl构建了这两个库?如果是这样:是的,我们构建libcurl和qt链接系统openssl libs
TCP Error: Error while reading: error:02001002:system library:fopen:No such file or directory, error:2006D080:BIO routines:BIO_new_file:no such file, error:0B084002:x509 certificate routines X509_load_cert_crl_file:system lib