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 页 ...
随机推荐
- double类型如何保留2为小数
double d=12.2121;string str = d.ToString("F2"); double x = 29.982;Console.WriteLine(x.ToSt ...
- Qt Creator快捷键大全,附快捷键配置方法
一.快捷键配置方法: 进入“工具->选项->环境->键盘”即可配置快捷键. 二.常用默认快捷键: 编号 快捷键 功能 1 Esc 切换到代码编辑状态 2 F1 查看帮助( ...
- wikioi1191 数轴染色
题目描述 Description 在一条数轴上有N个点,分别是1-N.一开始所有的点都被染成黑色.接着 我们进行M次操作,第i次操作将[Li,Ri]这些点染成白色.请输出每个操作执行后 剩余黑色点的个 ...
- libeXosip2(2) -- General purpose API.
General purpose API. general purpose API in libeXosip2-4.0.0. More... Modules eXosip2 configuration ...
- python基础学习05(核心编程第二版)部分
# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #========== ...
- Hibernate框架大配置关联小配置
1 <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-// ...
- 将字符串变成大写----C++实现
虽然这个题目很简单,但是也是会范很多错误的,平时你肯定知道,但是在编程的时候就是容易犯傻,而且八匹马都拽不回来... 看来还是要多写写代码..不废话了. 直接贴代码.. #include<ios ...
- Flexbox属性可视化指南
Flexbox 布局(国内很多人称为弹性布局)正式的全称为 CSS Flexible Box布局模块,它是CSS3新增的一种布局模式.它可以很方便地用来改善动态或未知大小的元素的对齐,方向和顺序等等. ...
- NET基础课--NET的一些概念0
0.CIL--公共中间语言 VC++:经过预编译,编译,汇编和链接生成本地可执行代码,支持它运行的是OS和本地cpu指令集. C#: 在.net框架下类似c#的高级语言经过编译生成的文件叫程序集 ...
- js的 new image()---转
创建一个Image对象:var a=new Image(); 定义Image对象的src: a.src=”xxx.gif”; 这样做就相当于给浏览器缓存了一张图片. 图像对象: 建立图像对象:图 ...