ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

使用thrift库中TNonblockingServer非阻塞服务引发的一堆编译问题

2020-12-11 18:00:03  阅读:430  来源: 互联网

标签:TNonblockingServer obj lib LNK2001 TSSLSocket 库中 error libthrift thrift


编译链接问题LNK2001

1>LINK : warning LNK4098: 默认库“LIBCMT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 OPENSSL_sk_num
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 OPENSSL_sk_value
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 OPENSSL_sk_pop_free
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 CRYPTO_free
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 OPENSSL_init_crypto
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 BIO_ctrl
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 ERR_get_error
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 ERR_peek_error
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 ERR_clear_error
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 ERR_error_string
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 ERR_reason_error_string
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 ERR_remove_state
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 RAND_poll
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 ASN1_STRING_length
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 ASN1_STRING_data
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 ASN1_STRING_to_UTF8
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 X509_verify_cert_error_string
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 X509_free
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 X509_get_subject_name
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 X509_NAME_get_index_by_NID
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 X509_NAME_get_entry
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 X509_NAME_ENTRY_get_data
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 X509_get_ext_d2i
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_CTX_set_options
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_CTX_set_cipher_list
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_CTX_new
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_CTX_free
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_pending
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_set_fd
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_get_rbio
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_get_wbio
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_get_verify_mode
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_CTX_use_PrivateKey_file
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_CTX_use_certificate_chain_file
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_get_peer_certificate
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_CTX_set_verify
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_CTX_set_default_passwd_cb
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_CTX_set_default_passwd_cb_userdata
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_new
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_free
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_accept
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_connect
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_read
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_peek
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_write
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_ctrl
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_CTX_ctrl
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_get_error
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 TLS_method
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 TLSv1_method
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 TLSv1_1_method
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 TLSv1_2_method
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_shutdown
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_get_shutdown
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_CTX_load_verify_locations
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 SSL_get_verify_result
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 OPENSSL_init_ssl
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 CONF_modules_unload
1>libthrift.lib(TSSLSocket.obj) : error LNK2001: 无法解析的外部符号 GENERAL_NAME_free

解决

项目属性–》C/C+±-》优化–》全程序优化: 改成

问题event库不行

1>libthrift.lib(TNonblockingServer.obj) : error LNK2001: 无法解析的外部符号 event_base_loopbreak
1>libthrift.lib(TNonblockingServer.obj) : error LNK2001: 无法解析的外部符号 event_base_loop
1>libthrift.lib(TNonblockingServer.obj) : error LNK2001: 无法解析的外部符号 evutil_make_socket_nonblocking
1>libthrift.lib(TNonblockingServer.obj) : error LNK2001: 无法解析的外部符号 evutil_socketpair
1>libthrift.lib(TNonblockingServer.obj) : error LNK2001: 无法解析的外部符号 event_get_version
1>libthrift.lib(TNonblockingServer.obj) : error LNK2001: 无法解析的外部符号 event_base_set
1>libthrift.lib(TNonblockingServer.obj) : error LNK2001: 无法解析的外部符号 event_base_new
1>libthrift.lib(TNonblockingServer.obj) : error LNK2001: 无法解析的外部符号 event_base_get_method
1>libthrift.lib(TNonblockingServer.obj) : error LNK2001: 无法解析的外部符号 event_base_free
1>libthrift.lib(TNonblockingServer.obj) : error LNK2001: 无法解析的外部符号 event_del
1>libthrift.lib(TNonblockingServer.obj) : error LNK2001: 无法解析的外部符号 evutil_make_socket_closeonexec
1>libthrift.lib(TNonblockingServer.obj) : error LNK2001: 无法解析的外部符号 event_set
1>libthrift.lib(TNonblockingServer.obj) : error LNK2001: 无法解析的外部符号 event_add

解决

libevent库没编译对。
libenvent下载https://github.com/nmathewson/Libevent.git
用VS编译工具编译出下面三个库:
libevent_extras.lib
libevent.lib
libevent_core.lib
(1)默认编译出来的是32位的
在这里插入图片描述

(2)编译x64的需要特别注意:
a.修改Makefile.nmake文件,加多 /MACHINE:X64
在这里插入图片描述
b.使用x64编译工具,运行编译命令
在这里插入图片描述

最后使用的工程加入依赖库,问题解决:
在这里插入图片描述

标签:TNonblockingServer,obj,lib,LNK2001,TSSLSocket,库中,error,libthrift,thrift
来源: https://blog.csdn.net/lishenluo/article/details/111048117

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有