【问题标题】:QTWebKit build error on WindowsWindows 上的 QTWebKit 构建错误
【发布时间】:2014-05-30 15:42:02
【问题描述】:

我有 QT 5.3 和一个使用 QWebView 小部件的应用程序。但是我有一台没有 SSE2 的 PC(QT 5.3 需要它),所以我决定从没有 SSE2 的源代码构建 QT 以在这台 PC 上运行我的应用程序。 QT 编译没有问题,但是当我想编译 QTWebKit 模块时出现错误:

(...)-LC:/qt-5.3.0/qtbase/lib -lQt5Positioning -LC:/qt-5.3.0/qtbase/lib -lQt5Sensors -LC:/qt-5.3.0/qtbase/lib -lQt5Core
Warning: resolving _cti_vm_throw by linking to @cti_vm_throw@4
Use --enable-stdcall-fixup to disable these warnings
Use --disable-stdcall-fixup to disable these fixups
C:/qt-5.3.0/qtwebkit/WebKitBuild/Release/Source/WebKit2/release/libWebKit2.a(QtNetworkAccessManager.o):QtNetworkAccessManager.cpp:(.text+0x310): undefined reference to `_imp___ZN13QNetworkReply15ignoreSslErrorsERK5QListI9QSslErrorE'
C:/qt-5.3.0/qtwebkit/WebKitBuild/Release/Source/WebKit2/release/libWebKit2.a(QtNetworkAccessManager.o):QtNetworkAccessManager.cpp:(.text$_ZN5QListI9QSslErrorED1 Ev[__ZN5QListI9QSslErrorED1Ev]+0x14): undefined reference to `_imp___ZN9QSslErrorD1Ev'
C:/Qt/Tools/mingw482_32/bin/../lib/gcc/i686-w64-mingw32/4.8.2/../../../../i686-w64-mingw32/bin/ld.exe: C:/qt-5.3.0/qtwebkit/WebKitBuild/Release/Source/WebKit2/release/libWebKit2.a(QtNetworkAccessManager.o): bad reloc address 0x14 in section `.text$_ZN5QListI9QSslErrorED1Ev[__ZN5QListI9QSslErrorED1Ev]'
collect2.exe: error: ld returned 1 exit status

我想是因为

Warning: resolving _cti_vm_throw by linking to @cti_vm_throw@4

我也想过 webkit 中的一个错误,但我不确定。

你能帮我解决这个问题吗?

【问题讨论】:

  • 你有内置支持 ssl 的 Qt(网络模块)吗?如果没有,请自己构建。另外,请阅读qt tagwiki。
  • 感谢您的回复。我检查了配置,看来 OpenSSL 支持是“是”。
  • 您是否尝试针对发布的 QtNetwork 5.3 dll 构建发布?你能检查一下 qtnetwork dll 是否有这些符号吗?顺便说一句,您的错误是未定义的引用,绝对不是警告。
  • 嗯,我不知道。我刚刚调试并发布了 QtNetwork 5.3 dll。 (我运行这个脚本来构建 QtWebKit:“perl Tools\Scripts\build-webkit --qt --release”)
  • 我好像没有这些符号。我在调试 QNetwork dll 中只有“ZN13QNetworkReply15ignoreSslErrorsEv”,但在发布 dll 中没有。我必须重新构建 QT 吗?

标签: c++ qt qtwebkit


【解决方案1】:

该错误似乎与您的 QtNetwork 发布 dll 文件中未找到符号有关。原因是您在没有 OpenSSL 支持的情况下构建了该模块。

C:/qt-5.3.0/qtwebkit/WebKitBuild/Release/Source/WebKit2/release/libWebKit2.a(QtNetworkAccessManager.o):QtNetworkAccessManager.cpp:(.text+0x310):未定义引用`_imp___ZN13QNetworkReply15ignoreSslErrorsERK5QListI9QSslErrorE'

C:/qt-5.3.0/qtwebkit/WebKitBuild/Release/Source/WebKit2/release/libWebKit2.a(QtNetworkAccessManager.o):QtNetworkAccessManager.cpp:(.text$_ZN5QListI9QSslErrorED1 Ev[__ZN5QListI9QSslErrorED1Ev]+0x14):对 `_imp___ZN9QSslErrorD1Ev' 的未定义引用

根据评论讨论,您似乎只是在编译您的发布 QtNetwork 模块构建期间正确安装了 OpenSSL。这很可能是导致此问题的原因。

解决方案是像您现在的系统一样重新构建您的 qtnetwork 发布版本,这样您将在您的 dll 中获得 SSL 相关符号。

请记住,标准是您需要有一个正确的 openssl 安装,Qt 在尝试构建时可以识别。

【讨论】:

  • 好的,谢谢。但是现在,当我尝试使用 OpenSSL (gnuwin32) 重建 QT 时,它在 QRegularexpression 编译时给了我很多错误。
猜你喜欢
  • 1970-01-01
  • 2016-02-11
  • 2013-12-05
  • 1970-01-01
  • 2018-04-18
  • 2013-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多