qt.network.ssl: QSslSocket: cannot call unresolved function 问题解决

转:  Qt5.4.2实现一个简单的浏览器 及相关问题的解决

首先,介绍一下我使用的Qt版本:

Qt Creator 3.4.1 (opensource)
Based on Qt 5.4.2 (MSVC 2013, 32 bit)

Built on May 28 2015 19:07:19

运行平台为Windows。至于linux平台,以后再说吧。

主要使用的是Qt中的QtWebKit和QWebView。这里Qt5做了相应的调整,可视化的QWebView被整合到了QtWebKitWidgets包中。使用到QWebView等webkit相关可视部件的,Qt5 单独放到了QtWebKitWidgets模块中,所以在使用了QWebView类的地方:

所以在做相应的头文件包含时,应按照如下方式书写:

#include <QtWebKit/QtWebKit> #include <QtWebKitWidgets/QWebView>

代码编译时,遇到了外部链接错误,显示无法解析的外部文件:

mainwindow.obj:-1: error: LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QWebView::QWebView(class QWidget *)" (__imp_??0QWebView@@QAE@PAVQWidget@@@Z) referenced in function "public: void __thiscall Ui_MainWindow::setupUi(class QMainWindow *)" (?setupUi@Ui_MainWindow@@QAEXPAVQMainWindow@@@Z)  mainwindow.obj:-1: error: LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall QWebView::~QWebView(void)" (__imp_??1QWebView@@UAE@XZ) referenced in function "public: virtual void * __thiscall QWebView::`scalar deleting destructor'(unsigned int)" (??_GQWebView@@UAEPAXI@Z)  mainwindow.obj:-1: error: LNK2019: unresolved external symbol "__declspec(dllimport) public: void __thiscall QWebView::load(class QUrl const &)" (__imp_?load@QWebView@@QAEXABVQUrl@@@Z) referenced in function "private: void __thiscall MainWindow::urlEnter(void)" (?urlEnter@MainWindow@@AAEXXZ)  mainwindow.obj:-1: error: LNK2019: unresolved external symbol "__declspec(dllimport) public: void __thiscall QWebView::setUrl(class QUrl const &)" (__imp_?setUrl@QWebView@@QAEXABVQUrl@@@Z) referenced in function "public: void __thiscall Ui_MainWindow::setupUi(class QMainWindow *)" (?setupUi@Ui_MainWindow@@QAEXPAVQMainWindow@@@Z)  mainwindow.obj:-1: error: LNK2001: unresolved external symbol "protected: virtual void __thiscall QWebView::changeEvent(class QEvent *)" (?changeEvent@QWebView@@MAEXPAVQEvent@@@Z)  mainwindow.obj:-1: error: LNK2001: unresolved external symbol "protected: virtual void __thiscall QWebView::contextMenuEvent(class QContextMenuEvent *)" (?contextMenuEvent@QWebView@@MAEXPAVQContextMenuEvent@@@Z)  ......  debugmyWebBrowser.exe:-1: error: LNK1120: 30 unresolved externals

这是因为在链接时,没有找到相应的链接库所致。我们手动指明要找的链接库:

//release edition #pragma comment(lib,"Qt5Widgets.lib") #pragma comment(lib,"Qt5WebKitWidgets.lib")  //debug edition #pragma comment(lib,"Qt5Widgetsd.lib") #pragma comment(lib,"Qt5WebKitWidgetsd.lib")

release版本和debug版本只能选则其一,当你编译debug版本时,选择debug edition,否则会报 QWidget: Must construct a QApplication before a QWidget 错误。这是因为把Debug/Release的Dll混到一起。选对相应的版本就能解决这个错误。

到这里,就编译OK了。

开始运行我们的程序,当我们输入网址,并单击后,在debug窗口中输出了如下信息,如图所示:



qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method qt.network.ssl: QSslSocket: cannot call unresolved function SSL_CTX_new qt.network.ssl: QSslSocket: cannot call unresolved function SSL_library_init qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error

上网搜索了下,是openssl的缘故。

我们需要openssl的两个dll文件,即libeay32.dll 和 ssleay32.dll 文件。下载安装openssl。


安装完毕后,将libeay32.dll 和 ssleay32.dll 文件拷贝到QtSDK中的存放有Qt5Network.dll和Qt5Networkd.dll的文件目录下。我的是G:QtQt5.4.25.4msvc2013_openglbin




将这两个DLL文件拷贝至QtQt5.4.25.4msvc2013_openglbin 目录之后,再次编译运行,世界多美好!



Qt5相对于Qt4来说,具有相当的变化,且行且记之。

Done!!!



注明:本文章属于转载,仅供行业人员学习交流使用,文章版权属于原创作者,在此向原创者致敬,感谢原创作者为大家学习交流提供精品内容。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值