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 页 ...
随机推荐
- 使用Discuz!自带参数防御CC攻击以及原理,修改Discuz X 开启防CC攻击后,不影响搜索引擎收录的方法
这部份的工作,以前花的时间太少. 希望能产生一定的作用. http://www.nigesb.com/discuz-cc-attacker-defence.html http://bbs.zb7.co ...
- 有关 sizeof和strlen的总结
先看看sizeof() 一.sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++.--等.它并不是函数.sizeof操作符以字节形式给出了其操作数的存储大小.操作数可以是 ...
- 【转】Device Tree(三):代码分析
原文网址:http://www.wowotech.net/linux_kenrel/dt-code-analysis.html 一.前言 Device Tree总共有三篇,分别是: 1.为何要引入De ...
- PS抠图神器: KnockOut 2.0安装汉化和使用教程
PS抠图神器: KnockOut 2.0安装汉化和使用教程 http://jingyan.baidu.com/article/6b97984d8aeadc1ca2b0bf3b.html
- JS获取按下的键盘字符
<html> <head> KeyPress Test!<hr> <script language="javascript"> fu ...
- 案例:用JS实现放大镜特效
案例:用JS实现放大镜特效 案例:用JS实现放大镜特效
- shell编程笔记(1)
shell编程: 编译器,解释器 编程语言:机器语言.汇编语言.高级语言 静态语言:编译型语言 强类型(变量) 事先转换成可执行格式 C.C++.JAVA.C# ...
- 集成支付宝SDK遇到的坑
一.首先我先把集成过程说一下.小编想说的话:支付宝是我做支付中觉得坑最多的一个,各种编译不过,各种出问题. 废话不多说,进入主题:1.首先当前是下载官方SDK啦,当前你也可以通过cocopods进行导 ...
- 【转】invokeRequired属性和 invoke()方法
C#中禁止跨线程直接访问控件,InvokeRequired是为了解决这个问题而产生的,当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它. 此时它将会在内部调用n ...
- Hadoop 写SequenceFile文件 源代码
package com.tdxx.hadoop.sequencefile; import java.io.IOException; import org.apache.hadoop.conf.Conf ...