【websocketpp】error: ‘ASN1_STRING_get0_data’ was not declared in this scope问题解决

项目中要实现WSS Client,因此选择了websocketpp,在实现websocketpp自带的example时,编译错误,提示error: ‘ASN1_STRING_get0_data’ was not declared in this scope,解决后记录如下;

一、问题原因是使用的OpenSSL版本不兼容的问题

ASN1_STRING_get0_data 目前了解到的是在>1.0.1版本的OpenSSL中存在,但实际出问题的时候,服务器版本是Open SSL1.0.2.k,所以为了保证能解决问题,建议使用OpenSSL 1.1.0版本

友情提示:查看openssl 版本命令 【openssl version】

当openssl < 1.0.1时,ASN1_STRING_get0_data该方法不存在,作为替代是ASN1_STRING_data方法,如果碰到类似ASN1_STRING_data 未声明的情况,请把openssl版本降低

二、升级OPENSSL版本

升级操作可参考如下链接的操作步骤【转载】Linux openssl 升级、降级

在升级完成后执行cmake 命令

[root@tallive websocketpp]# cmake .
* C++11 support partially enabled due to GCC version 5.3.1

* Configuring Boost
-- -- Using BOOST_ROOT
--
-- -- Include Directories
--        /usr/include
-- -- Library Directories
--        /usr/lib
-- -- Libraries
--        /usr/lib/libboost_system-mt.so
--        /usr/lib/libboost_thread-mt.so
--        -lpthread
--        /usr/lib/libboost_random-mt.so
--        /usr/lib/libboost_chrono-mt.so
--        /usr/lib/libboost_date_time-mt.so
--        /usr/lib/libboost_atomic-mt.so

** websocketpp
** associative_storage
-- -- Build Type:
--        EXECUTABLE
** broadcast_server
-- -- Build Type:
--        EXECUTABLE
** debug_client
-- -- Build Type:
--        EXECUTABLE
** debug_server
-- -- Build Type:
--        EXECUTABLE
** echo_client
-- -- Build Type:
--        EXECUTABLE
** echo_server
-- -- Build Type:
--        EXECUTABLE
** echo_server_both
-- -- Build Type:
--        EXECUTABLE
** echo_server_tls
-- -- Build Type:
--        EXECUTABLE
** enriched_storage
-- -- Build Type:
--        EXECUTABLE
** external_io_service
-- -- Build Type:
--        EXECUTABLE
** handler_switch
-- -- Build Type:
--        EXECUTABLE
** iostream_server
-- -- Build Type:
--        EXECUTABLE
** print_client
-- -- Build Type:
--        EXECUTABLE
** print_client_tls
-- -- Build Type:
--        EXECUTABLE
** print_server
-- -- Build Type:
--        EXECUTABLE
** simple_broadcast_server
-- -- Build Type:
--        EXECUTABLE
** sip_client
-- -- Build Type:
--        EXECUTABLE
** subprotocol_server
-- -- Build Type:
--        EXECUTABLE
** telemetry_client
-- -- Build Type:
--        EXECUTABLE
** telemetry_server
-- -- Build Type:
--        EXECUTABLE
** testee_client
-- -- Build Type:
--        EXECUTABLE
** testee_server
-- -- Build Type:
--        EXECUTABLE
** utility_client
-- -- Build Type:
--        EXECUTABLE

=========== Used Build Configuration =============

-- ENABLE_CPP11        = ON
-- BUILD_EXAMPLES      = ON
-- BUILD_TESTS         = OFF

-- WEBSOCKETPP_ROOT    = /vagrant/websocketpp
-- WEBSOCKETPP_BIN     = /vagrant/websocketpp/bin
-- WEBSOCKETPP_LIB     = /vagrant/websocketpp/lib
-- Install prefix      = /usr/local

-- WEBSOCKETPP_BOOST_LIBS        = system;thread;random
-- WEBSOCKETPP_PLATFORM_LIBS     = pthread;rt
-- WEBSOCKETPP_PLATFORM_TLS_LIBS = ssl;crypto

-- OPENSSL_FOUND        = TRUE
-- OPENSSL_INCLUDE_DIR     = /usr/include
-- OPENSSL_LIBRARIES = /usr/lib64/libssl.so;/usr/lib64/libcrypto.so
-- OPENSSL_VERSION = 1.1.0l

-- Configuring done
-- Generating done
-- Build files have been written to: /vagrant/websocketpp
[root@tallive websocketpp]#

重点关注OPENSSL_LIBRARIES 中指定的libssl.so 和 libcrypto.so的路径

需要通过strings命令来进一步确认使用的库版本是否正确

具体参考

[root@tallive websocketpp]# strings /usr/lib64/libssl.so | grep OpenSSL
OpenSSL 1.1.0l  10 Sep 2019

[root@tallive websocketpp]# strings /usr/lib64/libcrypto.so | grep OpenSSL
OpenSSL_version_num
OpenSSL_version
DH_OpenSSL
DSA_OpenSSL
EC_KEY_OpenSSL
RAND_OpenSSL
RSA_PKCS1_OpenSSL
UI_OpenSSL
OpenSSL CMAC method
OpenSSL default
%s:%d: OpenSSL internal error: %s
OpenSSL 1.1.0l  10 Sep 2019
OpenSSL X9.42 DH method
OpenSSL PKCS#3 DH method
OpenSSL DH Method
OpenSSL DSA method
OpenSSL 'dlfcn' shared library method
OpenSSL EC algorithm
OpenSSL EC_KEY method
OpenSSL X25519 algorithm
OpenSSL HMAC method
You need to read the OpenSSL FAQ, https://www.openssl.org/docs/faq.html
OpenSSL RSA method
OpenSSL PKCS#1 RSA
OpenSSL default user interface
OpenSSL_version
RSA_PKCS1_OpenSSL
EC_KEY_OpenSSL
DSA_OpenSSL
DH_OpenSSL
OpenSSL_version_num
UI_OpenSSL
RAND_OpenSSL

[root@tallive websocketpp]# strings /usr/lib64/libcrypto.so | grep ASN1_STRING_get0_data
ASN1_STRING_get0_data
ASN1_STRING_get0_data

通过上述命令确认当前使用的库正常,且libcrypto.so 库中包含ASN1_STRING_get0_data,代表升级成功,且库都生效

如果通过上述命令发现/usr/lib64/libssl.so 和 /usr/lib64/libcrypto.so 库版本不对,则需要重新建立软连接

[root@tallive websocketpp]# ln -s /usr/local/ssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so

[root@tallive websocketpp]# ln -s /usr/local/ssl/lib/libssl.so.1.1 /usr/lib64/libssl.so

完成上述重新建软连接之后,在检查库是否正常,生效

生效后,再次执行如下命令,完成webscoketpp的编译工作,在/bin目录下生成example对应的可执行文件,自此可进行demo 运行和修改了

[root@tallive websocketpp]#cmake . -D BUILD_EXAMPLES=ON

[root@tallive websocketpp]#make clean && make -j4

[root@tallive websocketpp]# ls bin/
associative_storage  debug_server  echo_server_both  external_io_service  print_client      simple_broadcast_server  telemetry_client  testee_server
broadcast_server     echo_client   echo_server_tls   handler_switch       print_client_tls  sip_client               telemetry_server  utility_client
debug_client         echo_server   enriched_storage  iostream_server      print_server      subprotocol_server       testee_client

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值