正好通过这次 Telegram 的运行,很想把常见的项目运行的错误好好的总结一下,在前面的博客中,又星星散散的总结过错误和一些警告的消除方法,这次把错误处理一下,还有Telegram项目中有999+的警告,我这种有洁癖的人,哈哈~准备把警告也消除一下,到时候再整理一篇警告消除的方法,还有以前的那些警告和错误消除的方法,都总结出来,希望可以帮到有需要的同学。

当然我们所要说的这些,都是围绕着Telegram展开的,先看看你下载了Telegram的源码的时候,会最先看到的问题,看下图:

这个是最简单的问题,就是文件丢失的问题:这个问题是挺简单,但在目前最新的3.18版本的Telegram的项目中,你需要一下几点:

1、目前这个版本的Telegram里面是没有适配最新版本的 MtProtokit 的,你要是把最新的 MtProtokit 加进去的话是要修改3.18项目的源码的。

   2、上面所缺的文件的原本的位置不是在图上所示的地方的,最好你Show in finder 一下它们上层的文件,因为你要是改了这里文件的文件的位置的话,你是需要修改 Build Settings 里面相对应的文件路径的,就比较的麻烦。

总结项目运行中你会可能遇到的问题:

一:找不到头文件

下面就是在Telegram中,头文件找不到的问题:

找不到头文件无非也就这两种种情况:

1、相对应的文件或者库没有导入

2、头文件的路径不对

就像我们在使用Cocopods的时候,你Pod完三方之后,可能发现会有些头文件提示 '.....' file not found,我们就会在Build Settings 菜单,找到\”User Header Search Paths\”设置项新增一个值"${SRCROOT}",并且选择\”Recursive\”,这个"${SRCROOT}"表示当前工程的根路径,$(PROJECT_DIR)表示的其实和"${SRCROOT}"相差不是很大,你要是上网搜一下很多都是"$(SRCROOT)"代表的是项目根目录下,"$(PROJECT_DIR)"代表的是整个项目,你理解了没?哈哈哈。。好了,这里是在Stackoverflow找到的What the different between SRCROOT and PROJECT_DIR?,希望能帮助到你理解它们。

Telegram里面还有下面这个文件:

这个文件的在我们最下面展示出来的群文件里面有,需要的可以去下载后拉到你的项目中。

二: Undefined symbols for architecture XXX

先说说后面这个XXX,这个XXX可能会是armv7、armv7s、arm64、i386、x86_64等,大概会是这几类,遇到的错误就像下面的这张图一样的,这张图首先不是我在Telegram截图的,这是我在晚上照的,在这里做一个参考吧。

要是说这个错误的话,说实话很多问题都会导致上面这个错误的出现,但记住大部分的情况,或者主要的一点---还是缺framework或.tbd。

这里我就不在一一的重复说明能出现的情况了,这里有一片博客,正对这个问题总结的更多一点,链接给大家:

Xcode编译Undefined symbols for architecture xxx 错误总结 (感谢作者!)

当然我们这个错误我们上面说的是在缺framework或.tbd的情况下,这个问题大部分出在你导入的第三方的东西之后,这个时候除了你要检查是不是缺了framework或.tbd,当然还有一种情况是想特别说一下的就是真的就是这个Architectures出的问题,先说说上面我们提过的像armv7、7s的意义都理解还是不知道,这里也补充总结一下,方便自己以后回顾。

先把链接抛出来。,这篇说的大概也都OK了,能够帮助你了解这个arm是什么:armv6, armv7, armv7s, arm64 的区别 (感谢作者!)

熟悉了上面的armv,再来看看要是你的金泰库真的不支持相应的架构,你怎么检查怎么处理?

1、终端检查 lipo - info 你的静态库路径

2、看终端的信息,你就可以看到这个静态库是不是真的不支持那个架构,不支持的话就两个办法,要么设备不在支持,要么找支持改框架的静态库。

比如下面友盟加入的时候,可能会出现下面的问题:

还有一种情况我就简单的说一下,就是在下面的地方,缺相应的文件,比方说"AAAA", referenced from:BBBB.o,这是就可能是缺相应的BBBB,要么.m要么.h。那就在相应的下面的地方添加相应的文件:

这个错误大概就说这么多吧,肯定还有其他的原因造成这个问题出现的,当然解决的办法我相信也很多很多,出现这种问题的时候,给大家点建议,不要因为出错挡住了就感觉没办法了,全世界的找人找群去问,当然不是说问了有错,只是希望你一定要亲自多试试,多试试肯定会有结果的,而且还要多总结,这种东西你要一总结了以后遇到可以翻以前自己写的东西,不总结,每次遇到都是一头雾水。毕竟错误不是常常有,一年能遇到多少次,以前遇到的,过个三个月估计就成新的了,尤其我这种人,好咯,接着往下面写。

三:这个就是顺便提一下

还有一个问题就是在弄这个Telegram错误分析的时候,一个朋友顺便问我的,就是这个 Reason: image not found,上面我们提过的这两点,其实是很几点,就几乎包括了Telegram会出现的所有的运行的错误了,这个只是顺便提一下,这个问题其实也简单,网上大部分给出的问题也是正确没问题的,就像网上的答案一样,问题就像下面的图片一样,改为option就可以,具体是哪一个框架你就在自己的错误日志中去找,这里也就不再累赘了:

Telegram的问题,主要的还是在上面我们总结的两点上面,希望可以帮助到想运行Telegram的朋友,要是还有什么问题,欢迎来聊,主页面个人资料有我的QQ,有需要加我,最后还是最近再说的我们这个Telegram的群,有需要的朋友可以加一下,我们最新版的Telegram的源码也是编译通过放出来了,我们放出来的都是做了国际化处理,让它支持中文的,最后就是群二维码了,等你们。

*****************  群号可以直接粘贴这里:485718322

Telegram学习解析系列(三) : Build Telegram报错分析总结的更多相关文章

  1. Telegram学习解析系列(二):这我怎么给后台传输数据?

    写在前面: 在iOS开发的过程中,有很多时候我们都在和数据打交道,最基本的就是数据的下载和上传了,估计很多很多的小伙伴都在用AFNetworking与后台数据打交道,可有没有想过,哪天AFNetwor ...

  2. Telegram学习解析系列(一):认识一下Telegram的源码

    前言: Telegram不知道有多少同行听过这玩意,或者在看它的源码.我是出于工作原因才接触到这东西,看的真是的......变方了!一个月估计刚刚找到门,还没进去多深,把自己的心得和对源码的认识以及我 ...

  3. ionic build android 报错分析

  4. ETL利器Kettle实战应用解析系列三

    本系列文章主要索引如下: 一.ETL利器Kettle实战应用解析系列一[Kettle使用介绍] 二.ETL利器Kettle实战应用解析系列二 [应用场景和实战DEMO下载] 三.ETL利器Kettle ...

  5. java基础解析系列(三)---HashMap

    java基础解析系列(三)---HashMap java基础解析系列 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)-- ...

  6. ionic2踩坑之ionic build android报错

    自己项目一直跑的好好好好的,build还是run都没问题,今天忽然一个小伙伴build一直报错.\ 错误如下: Error occurred during initialization of VMCo ...

  7. mysql5.7密码修改与报错分析

    1.修改密码 修改密码: vim /etc/my.cnf 的mysqld字段加入skip-grant-tables 重启MySQL,service mysqld restart 终端输入 mysql ...

  8. const变量赋值报错分析

    const变量赋值报错分析 const变量赋值报错 从变量到常量的赋值是合法C++的语法约定的, 如从char 到const char顺畅: 但从char **到 const char **编译器就会 ...

  9. Dubbo源码学习总结系列三 dubbo-cluster集群模块

    Dubbo集群模块的目的是将集群Invokers构造一个透明的Invoker对象,其中包含了容错机制.负载均衡.目录服务(服务地址集合).路由机制等,为RPC层提供高可用.高并发.自动发现.可治理的S ...

随机推荐

  1. [No00008B]远程桌面发送“Ctrl+Alt+Delete”组合键调用任务管理器

    向远程桌面发送"Ctrl+Alt+Delete"组合键的两种方法 1.在本地按下Ctrl+Alt+End,可以成功发送"Ctrl+Alt+Delete"组合键! ...

  2. spring 中的两个DaoSupport类的使用对比

    可以利用NamedParameterJdbcDaoSupport 已经封装的NamedParameterJdbcTemplate方便的进行sql中参数的初始化工作. 相对于JdbcDaoSupport ...

  3. Swift中的注释以及表达式

    Swift程序有两类注释:单行注释(//)和多行注释(/*...*/).注释方法与C.C++和Objective-C语言都是类似的,下面详细介绍一下.1. 单行注释单行注释可以注释整行或者一行中的一部 ...

  4. ARM Linux 如何--注册和触发--软中断

    1. 注册软中断当然是通过open_softirq 例子如下: void __init init_timers(void) { int err = timer_cpu_notify(&time ...

  5. C# 调用load事件

    在一个函数或者事件中调用另外的事件,例如调用Load事件 private void EventForm_Load(object sender, EventArgs e) { //相关内容 } priv ...

  6. angular2 学习笔记 ( Form 表单 )

    refer : https://angular.cn/docs/ts/latest/guide/forms.html https://angular.cn/docs/ts/latest/cookboo ...

  7. CodeForces 711D Directed Roads

    计数,模拟. 首先观察一下给出的图的特点: $1.$一定存在环. $2.$可能存在多个环. 我们对每个环计算方案数,假设环$C$上包含$x$条边,那么把环$C$破坏掉的方案数有${2^x} - 2$种 ...

  8. ELement-UI之树形表格(treeTable&&treeGrid)

    先上图来一波 支持无限层级,支持新增子级时自动打开父级,支持编辑时自动打开父级,执行操作时自带动画效果,支持初始化时设置全部打开或者关闭,支持一键展开与关闭丝滑般的无延迟 由于基于el-table扩展 ...

  9. php 连接oracle 导出百万级数据

    1,我们一般做导出的思路就是,根据我们想要的数据,全部查询出来,然后导出来,这个对数据量很大的时候会很慢,这里我提出来的思想就是分页和缓冲实现动态输出. 2.普通的我就不说了,下面我说一下分页和内存刷 ...

  10. .NET CORE下的Cache

    .NET CORE 下的缓存跟之前ASP.NET下的缓存有所不同,应用.NET CORE缓存首先需要引入Microsoft.Extensions.Caching.Memory程序包 下面简单写了一个C ...