【原】Window下公布Qt法度
添加时间:2013-7-2 点击量:
在Windows下应用Qt Creator编写、测试并完美法度后,就涉及到公布法度的题目了。下面将我在公布Qt法度时碰到的一些题目进行一下总结。
一、manifest的题目。
若是是应用VC2008版本的Qt库来开辟法度,则将法度公布到此外机械上运行时,会弹框提示应用法度设备不正确。法度公布时,已经将依附的动态链接库如msvcp90d.dll、msvcr90d.dll和Microsoft.VC90.DebugCRT.manifest都带上了,该当是manifest中提示的运行时库版本和实际供给的运行时库版本不一致导致的。
测验测验在法度的pro文件中添加了如下宏定义:
DEFINES += _BIND_TO_CURRENT_VCLIBS_VERSION=1 _BIND_TO_CURRENT_CRT_VERSION=1
这两个宏可以或许让法度应用正确的运行时库版本。从头编译法度后,拷贝到此外机械上运行,依然弹框提示应用法度设备不正确。题目毕竟出在哪儿呢?
该当是Qt自带的库,如QtCored4.dll等,在编译时没有指定上述两个宏,导致其依附的运行时库版本和实际供给的不一致。所以,我们须要从头编译下Qt库。打开mkspecs目次,进入win32-msvc2008目次,用文本编辑器打开qmake.conf文件,在DEFINES那一行最后面加上如下宏定义(重视:与前面的宏定义之间留一个空格):
_BIND_TO_CURRENT_VCLIBS_VERSION=1 _BIND_TO_CURRENT_CRT_VERSION=1
从头编译Qt库,然后应用新的库编译公布我们的法度,运行正常!
二、中文乱码的题目。
设置字符编码后,在本机中文可以或许正常显示,但拷贝到此外机械后,中文却显示为乱码。本机与其他机械的最大差别就是本机安装了Qt的开辟景象,而其他机械则没有。所以,该当是因为显示中文还须要依附一些中文字符的编解码库导致的。
进入Qt安装目次的plugins子目次,将codecs目次全部拷贝到法度目次下,再次运行法度,中文显示正常!
拷贝codecs目次时,有以下几点须要希罕重视:
1、codecs目次必须放到法度exe地点目次下,不克不及放到此外目次下。
2、codecs目次不克不及改名,必须就叫codecs。
3、codecs目次下的所有lib文件可以删除掉。若是只须要显示简体中文,则可以仅保存qcncodecs4.dll(对应Release版)或qcncodecsd4.dll(对应Debug版)。我俩之间有着强烈的吸引力。短短几个小时后,我俩已经明白:我们的心是一个整体的两半,我俩的心灵是孪生兄妹,是知己。她让我感到更有活力,更完美,更幸福。即使她不在我身边,我依然还是感到幸福,因为她总是以这样或者那样的方式出现在我心头。——恩里克·巴里奥斯《爱的文明》
在Windows下应用Qt Creator编写、测试并完美法度后,就涉及到公布法度的题目了。下面将我在公布Qt法度时碰到的一些题目进行一下总结。
一、manifest的题目。
若是是应用VC2008版本的Qt库来开辟法度,则将法度公布到此外机械上运行时,会弹框提示应用法度设备不正确。法度公布时,已经将依附的动态链接库如msvcp90d.dll、msvcr90d.dll和Microsoft.VC90.DebugCRT.manifest都带上了,该当是manifest中提示的运行时库版本和实际供给的运行时库版本不一致导致的。
测验测验在法度的pro文件中添加了如下宏定义:
DEFINES += _BIND_TO_CURRENT_VCLIBS_VERSION=1 _BIND_TO_CURRENT_CRT_VERSION=1
这两个宏可以或许让法度应用正确的运行时库版本。从头编译法度后,拷贝到此外机械上运行,依然弹框提示应用法度设备不正确。题目毕竟出在哪儿呢?
该当是Qt自带的库,如QtCored4.dll等,在编译时没有指定上述两个宏,导致其依附的运行时库版本和实际供给的不一致。所以,我们须要从头编译下Qt库。打开mkspecs目次,进入win32-msvc2008目次,用文本编辑器打开qmake.conf文件,在DEFINES那一行最后面加上如下宏定义(重视:与前面的宏定义之间留一个空格):
_BIND_TO_CURRENT_VCLIBS_VERSION=1 _BIND_TO_CURRENT_CRT_VERSION=1
从头编译Qt库,然后应用新的库编译公布我们的法度,运行正常!
二、中文乱码的题目。
设置字符编码后,在本机中文可以或许正常显示,但拷贝到此外机械后,中文却显示为乱码。本机与其他机械的最大差别就是本机安装了Qt的开辟景象,而其他机械则没有。所以,该当是因为显示中文还须要依附一些中文字符的编解码库导致的。
进入Qt安装目次的plugins子目次,将codecs目次全部拷贝到法度目次下,再次运行法度,中文显示正常!
拷贝codecs目次时,有以下几点须要希罕重视:
1、codecs目次必须放到法度exe地点目次下,不克不及放到此外目次下。
2、codecs目次不克不及改名,必须就叫codecs。
3、codecs目次下的所有lib文件可以删除掉。若是只须要显示简体中文,则可以仅保存qcncodecs4.dll(对应Release版)或qcncodecsd4.dll(对应Debug版)。
我俩之间有着强烈的吸引力。短短几个小时后,我俩已经明白:我们的心是一个整体的两半,我俩的心灵是孪生兄妹,是知己。她让我感到更有活力,更完美,更幸福。即使她不在我身边,我依然还是感到幸福,因为她总是以这样或者那样的方式出现在我心头。——恩里克·巴里奥斯《爱的文明》