QT enVocabulary工程打包问题记录

标签: QML QT Ubuntu
23人阅读 评论(0) 收藏 举报
分类:

我用QT自带的工具*deployqt把工程enVocabulary在mac,windows,ubuntu上打包,出现了一些问题。
下面是一些bug记录。

SQlite Mysql的依赖问题。

WARNING: Plugin "libqsqlodbc.dylib" uses private API and is not Mac App store compliant.
WARNING: Plugin "libqsqlpsql.dylib" uses private API and is not Mac App store compliant.
ERROR: no file at "/opt/local/lib/mysql55/mysql/libmysqlclient.18.dylib"
ERROR: no file at "/usr/local/lib/libpq.5.dylib"

听说这是QT自身的bug,使用了SQlite则会需要用到Mysql的库文件,不用管。
直接macdeployqt走起。

QML程序打包问题

运行程序,窗体含有QML的部分是空白的。

module "QtQuick.Window" is not installed
module "QtQuick.Controls" is not installed
module "QtQuick" is not installed
...

搜寻后,发现系统的QML路径是/Users/weiyang/Qt5.9.2/5.9.2/clang_64/qml
打包后已经有framework:./enVocabulary.app/Contents/Frameworks/QtQuick.framework
那是怎么回事儿?
在文件夹中搜寻qml文件:

weiyangdeMacBook-Air:enVocabulary weiyang$ find enVocabulary.app/ -name *qml
weiyangdeMacBook-Air:enVocabulary weiyang$ 

居然没有qml文件!
在stack overflow上找到相关的问题:https://stackoverflow.com/questions/17475788/qt-5-1-and-mac-bug-making-macdeployqt-not-working-properly/28221423#28221423
原来在使用macdeployqt打包的时候需要指定qml文件的地址。
也即:macdeployqt enVocabulary.app/ -qmldir=/Users/weiyang/code/enVocabulary -dmg
然后在enVocabulary.app//Contents/Resources/qml/ 就能看到各种qml, qmlc文件了
之后,编译运行,一切正常!

No rule to make target

类似于这样的报错:

mingw32-make[1]: *** No rule to make target '../enVocabulary/image/res.rc', needed by 'OBJ/res_res.o'.  Stop.

不一定是Makefile的问题,很有可能是根本没有文件../enVocabulary/image/res.rc(名字写错了)

qt.network.ssl: QSslSocket: cannot resolve

我的程序使用了network相关的类,然后运行报错:

qt.network.ssl: QSslSocket: cannot resolve CRYPTO_num_locks
qt.network.ssl: QSslSocket: cannot resolve CRYPTO_set_id_callback
qt.network.ssl: QSslSocket: cannot resolve CRYPTO_set_locking_callback
qt.network.ssl: QSslSocket: cannot resolve ERR_free_strings
...
qt.network.ssl: QSslSocket: cannot resolve SSLv3_client_method
qt.network.ssl: QSslSocket: cannot resolve SSLv23_client_method
qt.network.ssl: QSslSocket: cannot resolve SSLv2_server_method
qt.network.ssl: QSslSocket: cannot resolve SSLv3_server_method
qt.network.ssl: QSslSocket: cannot resolve SSLv23_server_method
qt.network.ssl: QSslSocket: cannot resolve X509_STORE_CTX_get_chain
qt.network.ssl: QSslSocket: cannot resolve OPENSSL_add_all_algorithms_noconf
qt.network.ssl: QSslSocket: cannot resolve OPENSSL_add_all_algorithms_conf
qt.network.ssl: QSslSocket: cannot resolve SSLeay
qt.network.ssl: QSslSocket: cannot resolve SSLeay_version

当前的QT版本是5.9.2,我用代码打印SSL相关的信息:

qDebug()<<"SSL version use for build: "<<QSslSocket::sslLibraryBuildVersionString();
qDebug()<<"SSL version use for run-time: "<<QSslSocket::sslLibraryVersionString();
qDebug()<<QSslSocket::supportsSsl()<<endl;
qDebug()<<QCoreApplication::libraryPaths();

结果:

SSL version use for build:  "OpenSSL 1.0.1e-fips 11 Feb 2013"
qt.network.ssl: Incompatible version of OpenSSL
SSL version use for run-time:  ""
false 

在stack overflow上一顿查询,什么重新下载openssl再编译,QT组件修复等方法都尝试了一遍,没用。

然后逛qt官网,希望最新版本的QT能解决这个问题。http://blog.qt.io/blog/2017/12/07/qt-5-10-released/
果然让我找到了相关的信息:




下载Qt5.10.1,安装后重新运行:

SSL version use for build:  "OpenSSL 1.0.2k-fips  26 Jan 2017"
SSL version use for run-time:  "OpenSSL 1.0.2g  1 Mar 2016"
true 

但我在后面的log(考虑到容错性,我加了许多的DEBUG)中发现了新的问题:The issuer certificate of a locally looked up certificate could not be found
这是为什么?我在terminal中启动openssl,然后它提示找不到库文件,我将libcrypto.so, libssl.so相关的四个文件全部放进/usr/lib中,然后可以正常启动了。

parallels@parallels-vm:~/Downloads/openssl-1.1.1-pre4$ openssl version
OpenSSL 1.1.1-pre4 (beta) 3 Apr 2018

但是Qt运行报错:

SSL version use for build:  "OpenSSL 1.0.2k-fips  26 Jan 2017"
...
qt.network.ssl: QSslSocket: cannot resolve OPENSSL_add_all_algorithms_conf
qt.network.ssl: QSslSocket: cannot resolve SSLeay
qt.network.ssl: Incompatible version of OpenSSL
...
qt.network.ssl: Incompatible version of OpenSSL
SSL version use for run-time:  ""   SSL version use for run-time: 
false 

版本不兼容,好烦。。。
参照之前的log,我下载了openssl 1.0.2g:https://www.openssl.org/source/old/1.0.2/
编译,安装,然后创建软连接:ln -s /home/parallels/Downloads/openssl-1.0.2g/apps/openssl /usr/local/bin/openssl
但是版本不兼容的错误仍然存在!回想自己是将libcrypto.so, libssl.so相关的四个文件全部放进/usr/lib中然后就出现了兼容性问题。我又将/usr/lib路径下的*crypto.so*,*ssl.so*的四个文件统统删除了。
然后运行,perfect!

查看评论

Qt程序打包成exe可执行文件图文教程

  • 2013年12月28日 14:33
  • 4.53MB
  • 下载

Qt5在打包发布时遇到的一些问题

介绍了一些自己在Qt开发过程中遇到的问题和解决方案
  • qq_25831361
  • qq_25831361
  • 2017-08-31 19:09:06
  • 181

初学Qt——程序打包(环境vs2012+qt5.1.0)

说来可笑,网上那么多的教程,偏偏结尾的时候就没有一个能详细的讲下关于程序的发布。开发Qt是这样,刚开始做web也是这样,因为是自学的,所以都没人可以教下,结果到了项目完成的最后总是要花费成吨的时间去查...
  • qq_31117007
  • qq_31117007
  • 2016-05-18 01:17:48
  • 2385

使用RPM打包QT程序

本文章只是一个RPM打包的一个小例子,仅适合初学者参考! 先说一下使用RPM打包的步骤: 一、首先将写好的内容使用tar压缩成.tar.gz格式 二、创建所需的目录并配置rpm打包目录  ...
  • yzy_it
  • yzy_it
  • 2016-07-08 14:50:40
  • 685

Qt应用程序打包成软件,具体方法可看我转载的博客。

  • 2017年10月29日 18:07
  • 1.05MB
  • 下载

Qt 的exe打包发布

Qt的exe发布分2个版本,Qt4和Qt5, Qt5的打包相当简单,因为Qt5提供了一个叫windeployqt的指令, 我这里使用的是Qt5.7的版本,在程序里面找到Qt 5.7 for Des...
  • prompty
  • prompty
  • 2016-12-23 09:28:56
  • 389

QT工程打包发布

Qt版本 5.7.1 MSVC2013_641、添加环境变量在..\Qt5.7.0\5.7\msvc2013_64\bin(..省略了盘符,例如我的D:\Qt\Qt5.7.0\5.7\msvc2013...
  • tadpole099
  • tadpole099
  • 2017-05-27 16:11:26
  • 120

Qt工程打包发布

Qt程序打包发布方法(使用官方提供的windeployqt工具) 转自:http://blog.csdn.net/iw1210/article/details/51253458 转自:...
  • chenfeifei521
  • chenfeifei521
  • 2017-11-01 09:32:22
  • 97

Qt for iOS:从Qt工程到ipa安装包

Qt for iOS:从Qt工程到ipa安装包
  • wsj18808050
  • wsj18808050
  • 2014-12-31 19:05:58
  • 5404

在windows下发布QT程序遇到问题及解决

123
  • Fanpei_moukoy
  • Fanpei_moukoy
  • 2014-03-12 20:41:38
  • 1912
    个人资料
    持之以恒
    等级:
    访问量: 37万+
    积分: 9429
    排名: 2418
    我的链接
    最新评论