YY语音从4.0版本开始是基于Qt的开发过程,以及碰到的问题
链接:http://www.zhihu.com/question/21359230/answer/20127715
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
决定是否采用某framework之前,首先要确定是不是有发布上的问题,毕竟YY语音作为一个服务于数千万用户的客户端软件,面临的用户软硬件环境是比较复杂的,而且一旦遇到无法安装或者安装后不能运行之类的兼容性问题会导致大量的用户流失。
我在预研阶段测试了很多不同的软硬件环境,Qt本身倒是没什么问题,问题比较多的反而是VC的运行时库 msvcrt。
我们采用的是动态链接Qt库,因为YY语音的代码规模比较大,需要多人协作开发,不同模块按DLL划分比较方便,采用静态链接是不现实的。
YY语音采用的是 Qt 4.7.1版本。
Qt库和调用它的 EXE DLL放在同一个目录就可以了,有个问题要注意,Qt的图片解码库比如jpeg gif解码等是以插件形式存在的发布时要带上 Qt的imageformats里面的几个dll,通常就是 qjpeg4.dll qgif4.dll qico4.dll ,另外为了让Qt可以找到这些插件需要设置下Qt插件的加载目录
在程序启动时调用 QCoreApplication::setLibraryPaths(libPaths); 把 imageformats所在的目录放到 libPaths里。
VC运行时库的安装是个麻烦问题,YY语音采用的是VC2008编译器,从vc2005开始微软加入了manifest机制控制运行时库的加载,不再像vc2003及之前的版本那样只要放到exe目录就行了。如果用户机器上安装过msvcrt的分发包则没问题,否则程序不能运行。
简单的处理方法是 把 Microsoft.VC90.CRT 目录及目录下的文件放到exe相同的目录即可。
这样的话,应用程序如果找不到系统安装的msvcrt,就会加载自己带的那份。
Microsoft.VC90.CRT这个目录可以在vc安装的目录找到,搜索下吧。
假设 你的 app安装到 <app install dir>目录下,那么这个应用安装后的目录下的结构可能是这样的。
<app install dir>
yourapp.exe
yourdll1.dll
yourdll2.dll
QtCore4.dll
QtGui4.dll
<imageformats>
qgif4.dll
qjpeg4.dll
qico4.dll
<Microsoft.VC90.CRT>
Microsoft.VC90.CRT.manifest
msvcr90.dll
msvcp90.dll
大家也可以下载安装YY语音参考下安装目录下的文件。
YY语音从4.0版本开始是基于Qt的开发过程,以及碰到的问题的更多相关文章
- Jeecg-Boot 2.0 版本发布,基于Springboot+Vue 前后端分离快速开发平台
目录 Jeecg-Boot项目简介 源码下载 升级日志 Issues解决 v1.1升级到v2.0不兼容地方 系统截图 Jeecg-Boot项目简介 Jeecg-boot 是一款基于代码生成器的智能开发 ...
- Volcano社区v1.6.0版本正式发布
摘要:Volcano社区v1.6.0版本正式发布.此次版本增加了弹性作业管理.基于真实负载的动态调度. 基于真实负载的重调度.Volcano Job插件--MPI等多个新特性. 本文分享自华为云社区& ...
- 多玩YY语音的面试题:C++中如何在main()函数之前执行操作?
多玩YY语音的面试题:C++中如何在main()函数之前执行操作? 第一反应main()函数是所有函数执行的开始.但是问题是main()函数执行之前如何执行呢? 联想到MFC里面的 C**App类的t ...
- 支持边云协同终身学习特性,KubeEdge子项目Sedna 0.3.0版本发布!
摘要:随着边缘设备数量指数级增长以及设备性能的提升,边云协同机器学习应运而生,以期打通机器学习的最后一公里. 本文分享自华为云社区<支持边云协同终身学习特性,KubeEdge子项目Sedna 0 ...
- .NET Core 2.0版本预计于2017年春季发布
英文原文: NET Core 2.0 Planned for Spring 2017 微软项目经理 Immo Landwerth 公布了即将推出的 .NET Core 2.0 版本的细节,该版本预计于 ...
- 纪念BLives 1.0版本发布
历时两个多月的时间,BLives程序1.0发布,在开发程序期间自己经历了很多,考试,恋爱,学业,自己很纠结 很伤心,有时候很无助,为了让自己有事干,我在考试备考期间去设计程序- -#,虽然程序设计的一 ...
- 【vuejs小项目——vuejs2.0版本】单页面搭建
http://router.vuejs.org/zh-cn/essentials/nested-routes.html 使用嵌套路由开发,这里会出错主要把Vue.use(VueRouter);要进行引 ...
- geotrellis使用(二十)geotrellis1.0版本新功能及变化介绍
目录 前言 变化情况介绍 总结 一.前言 之前版本是0.9或者0.10.1.0.10.2,最近发现更新成为1.0.0-2077839.1.0应该也能称之为正式版了吧.发现其中有很多变化, ...
- 【原】迎接微信winphone 5.0 版本的IE10样式兼容
微信 Android 5.1 和 iPhone 5.1 已正式发布了,据说本12月底,微信将推出 Winphone 5.0版本,全面支持微信支付,它绑定 IE10 浏览器,那么做微信公众号的 H5 页 ...
随机推荐
- spoj 104 Highways (最小生成树计数)
题目链接:http://www.spoj.pl/problems/HIGH/ 题意:求最小生成树个数. #include<algorithm> #include<cstdio> ...
- SHELL种类,版本及选择
SHELL种类,版本及选择 凡是使用 *INX 的人,不论是作为 login shell 还是编程,多少都要接触到 Shell.经过多年的发展, Shell 的种类繁多.除了我们熟悉的 sh.ksh. ...
- sql server数据建表
use edudbgoif exists(select * from sysobjects where name='department')drop table departmentcreate ta ...
- Handsontable通用方法
1.clear():清空数据 2.createCol(index,amount,createAutomatically):添加列 index:列索引,amount:添加的列总数,crea ...
- UITableView 自定义选中Cell颜色
cell.selectedBackgroundView = [[UIView alloc] initWithFrame:cell.frame]; cell.selectedBackgroundView ...
- OCR怎么能离开扫描仪呢?
说起OCR,说来说去就是和各种各样的图片打交道. 所以图片的质量很的关键. 说起图片的质量,不得不提的就是图片的採集. 眼下最靠谱的图像採集来源就是扫描仪. 扫描仪的话就大有说法,最靠谱的扫描仪,扫描 ...
- linux在文件打包和压缩
1. 打包和压缩文件 linux现在经常使用gzip和bzip2要压缩的文件.tar压缩文件. 经常使用的扩展: *.gz gzip压缩文件 *.bz2 bzip2压缩的文件 *.tar t ...
- Hibernate PO对象的状态
Hibernate的PO对象有三种状态:临时状态(又称临时态).持久状态(又称为持久态)和脱管状态(又称为脱管态.游离态).处理持久态的对象也称为PO,临时对象和脱管对象也称为VO. 1.临时态: 简 ...
- mono for android工具下载
http://www.wuleba.com/25510.html Windows平台:http://xamarin.com/installer_assets/v3/Windows/Universal/ ...
- nginx搭建flv、mp4流媒体服务
1.安装pcre-8.33.tar.bz2 #tar -xvf 1.pcre-8.33.tar.bz2 #cd pcre-8.33/ #./configure #make && mak ...