目录
一、前言
二、环境准备
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
三、编译
四、总结和学习
一、前言
Telegram 是一款全球广泛使用的即时通讯软件,以其强大的隐私保护、跨平台同步和丰富的功能而闻名。它支持一对一聊天、群组(最多20万成员)和频道(无限订阅者),并提供端到端加密,确保用户消息的安全性。Telegram 还具备语音通话、视频通话、文件共享(单文件最大2GB)和自定义贴纸等功能。此外,它通过机器人和频道为用户提供自动化服务和内容订阅,广泛应用于个人沟通、品牌推广和社区建设。凭借其简洁的界面和强大的功能,Telegram 已成为全球超过10亿用户的首选即时通讯工具之一。
相信大家都知道Telegram,国内用的大多数都是微信,国外很多用户都是用的是Telegram,而且Telegram的客户端代码是开源的,包括iOS、Android、macOS 和桌面版。今天我着篇文章就是介绍一下怎么编译桌面版的,之前我一直都只是把克隆了一下桌面版的代码,想着跑起来很简单,这几天详细去了解后发现还挺麻烦的,就想着写成文章记录一下。
二、环境准备
2.1
需要用到Visual Studio,我使用的是vs2022的版本,SDK版本是10.0.22000.0,最好不要用太老的版本
2.2
在同一个目录下创建两个文件夹,名称是Libraries和ThirdParty,然后分别去下载Python,git,cmake这三个工具,将这三个工具放在ThirdParty文件夹里。
去区域设置里勾上UTF-8编码
下载地址:
Python3.10:https://www.python.org/downloads/
Git:https://git-scm.com/download/win
cmake2.21及以后版本:https://cmake.org/download/
注意,关于git和cmake的版本不要下载最新的,不然后续自动下载所需的工具和第三方库的时候会有很多很多的报错,我踩了很多很多坑。
我当时使用git最新版本在下面2.5步的时候运行win.bat卡在Receiving objects,查资料发现这个问题必须将git版本降低后才解决的,把原来那个卸载了之后,我又下载了一个新的的git版本
https://github.com/git-for-windows/git/releases/tag/v2.45.2.windows.1
$ git --version
git version 2.45.2.windows.1
cmake我开始下载的cmake-4.0.0-rc3-windows-x86_64版本,后面也是在2.5步的时候运行win.bat出错弹出一个warning,查资料发现是telegram项目对CMake有最低版本需求和策略,我查了一下CMakeList.txt代码,然后直接给原来的cmake给卸载了,最后下载了一个3.31.6稳定的版本。
$ cmake --version
cmake version 3.31.6
2.3
勾选上区域设置里勾上UTF-8编码,直接搜语言设置,就可以找到。
2.4
使用git获取Telegram Desktop,在Libraries和ThirdParty同级目录下直接克隆。
git clone --recursive https://github.com/telegramdesktop/tdesktop.git
2.5
在电脑找vs的X86编辑器,我编译的是32位的telegram,更稳定一些。
打开之后使用cd /d xxx\tdesktop\Telegram\build\prepare进入到win.bat目录吗,然后输入win.bat即可。
显示这样就是过程中,一共有31个依赖软件和第三方库,最后跑完就如下所示:
2.6
这一步主要讲一下2.5的一些出错等问题。
1.关于git和cmake的版本不要下载最新的,具体下载哪个版本参考我上面就讲的2.2 。
2.我在9/31的时候遇到error: RPC failed; curl 56 Recv failure:.....的问题,是因为这个依赖软件内存比较大,打开git,修改一下git的http.postBuffer的值就可以了,我当时改成0.5G,1G,2G都不行,最后一气之下改成10G就可以了。
git config --global http.postBuffer 10485760000
3.最后整个编译完大概是36个G,要确保内存够用。
4.关于2.3步勾上UTF-8编码,等后续跑成功之后就可以关了,要不然你这个电脑很多中文都直接乱码或者消失,尤其是游戏里。
5.有的一直卡在x/31一直下载不了,那就自己手动下载,简单粗暴。
6.在2.5的整个过程可能一直不断有warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。 请将该文件保存为 Unicode 格式以防止数据丢失这种错误,不影响不用管就行。
5.整个2.5大概需要跑半天的时间,不要着急,卡在某个地方就点点键盘的enter键,检查检查VPN网速,我在这一步遇到了很多很多问题,上面只是随便列了几个,可能不全,遇到问题就去看报错和warning或者日志查资料解决,和平时解bug一个思路,一般都是弹出warning,然后显示FAILED然后结束,查资料解决完bug,继续输入win.bat即可,这个时候会出现r重构,a全部重构,s跳过,p打印,q退出这几种选项,点R键就可以。
2.7
2.5的31个所需的工具和第三方库下载完之后,还是使用vs的X86编辑器进入到xxx\tdesktop\Telegram目录,然后输入以下命令即可,命令中的api_id和api_hash是官方提供的示例,自己有的话可以替换成自己的。
configure.bat -D TDESKTOP_API_ID=17349 -D TDESKTOP_API_HASH=344583e45741c457fe1862106095a5eb
2.8
构建成功的话会在out文件夹里出现sln文件,点击就能进入vs22里开始编译了。
三、编译
点击上图Telegram.sin即可,然后生成本解决方案,运行就可以了,编译成功就如下图。
我当时编译完后,遇到两处fatal error C1001: 内部编译器错误,都是if语句,这个bug之前遇到过,都是语法错误,然后检查检查代码发现没有任何问题,看了很多解决方案都是修改“全程序优化项”,我改了之后发现没有生效,查资料知道修改“全程序优化项”只对64位的生效,32位的不行,最后看到一篇文章说将原来工程编译生成的目录全删掉,再编译,居然过了。
当然对于这个问题还有一个简单粗暴的解决方式,就是直接把这两个if语句给注释掉,我不建议这样搞,对于每一个bug要是只解决表面,深处留下更大的隐患以后肯定会出现更严重的bug。
四、总结和学习
在成功编译 Telegram Desktop 后,怎么深入学习其源码是很多人头疼的问题,下面我简单分享一下学习的步骤。
4.1 可以先从项目的目录结构入手,了解不同模块的功能划分,例如 Lib文件夹下的标准库和 Telegram 文件夹下的核心功能实现、慢慢梳理程序的启动流程,理解其初始化逻辑和核心组件的加载方式。
4.2 对于初学者来说,可以从简单的功能模块开始,比如用户界面的实现或消息发送与接收的流程。Telegram Desktop 使用了高效的多线程和异步处理机制,研究这些机制如何实现高性能的消息处理和网络通信,将有助于提升对并发编程的理解。同时,关注其端到端加密的实现细节,学习如何在实际应用中保障用户隐私和数据安全。
4.3 Telegram Desktop 的代码中广泛使用了设计模式,如单例模式、观察者模式等,研究这些模式的运用场景和实现方式,可以加深对面向对象编程的理解。
4.4 还可以通过调试工具逐步跟踪代码执行过程,观察变量变化和函数调用栈,从而更直观地理解代码逻辑,这样可以好好学习Visual Studio自带的各种调试代码强大的功能。
总之Telegram Desktop 的源码是一个丰富的学习资源,通过系统地研究和实践,可以逐步掌握大型C++ 项目的开发技巧和最佳实践。
最后,如果觉得我的文章对你有帮助,请点赞收藏加关注,谢谢大家。