iOS底层原理:苹果开源 objc4-818 源码项目的编译和调试(二)

简介: 作为一名iOS程序员,探索OC底层原理永不止息,同时也是永远的痛,最开始只能靠猜测!后面慢慢找到了苹果官方开源的源码来辅助看一下,但是尽管这样,还是显得不太直观!如果objc源码能够像我们自己创建的项目一样直接编译调试,像我们自己的代码一样能够直接 LLDB 调试,流程跟踪,那简直不要太爽。废话不多说,开炮~ 哦,不是,是开干~!🚀
报错9:'os/tsd.h' file not found


同样是找到文件位置,tsd.h文件在xnu-7195.141.2/libsyscall/os目录下

解决方式:


  1. tsd.hxnu-7195.141.2/libsyscall/os目录下copy到JQDependencies/os/目录下
报错10:'System/pthread_machdep.h' file not found

同样是找到文件位置,pthread_machdep.h文件在Libc-825.40.1/pthreads目录下。

注意:经过一番探索,我发现pthread_machdep.h只在Libc-825.40.1及以下版本才有


image.png

解决方式:


  1. pthread_machdep.hLibc-825.40.1/pthreads目录下copy到JQDependencies/System/目录下


报错11:'CrashReporterClient.h' file not found


同样是找到文件位置,CrashReporterClient.h文件在Libc-825.40.1/include目录下。


解决方式:

  1. CrashReporterClient.hLibc-825.40.1/include目录下copy到JQDependencies/目录下


image.png


导入CrashReporterClient.h文件后,如果还报错,用以下两种方式解决:

  • 第一种:需要在 Build Settings -> Preprocessor Macros 中加入:LIBC_NO_LIBCRASHREPORTERCLIENT


image.png

第二种:在CrashReporterClient.h中添加如下宏定义

image.png


报错12:Typedef redefinition with different types ('int' vs 'volatile OSSpinLock' (aka 'volatile int'))

pthread_lock_t重复定义了

解决方式:

  • 注释掉 在*pthread_machdep.h文件中的定义


image.png

报错13:


Static declaration of '_pthread_has_direct_tsd' follows non-static declaration
和 Static declaration of '_pthread_getspecific_direct' follows non-static declaration

解决方式:

  • 把这些声明在*pthread_machdep.h文件中注释掉就行

image.png

报错14:/JQDependencies/os/lock_private.h:288:37: Expected ','


image.png

解决方式:


  • 把这个函数中的bridgeos(4.0)参数删除即可
报错15:Use of undeclared identifier 'dyld_fall_2020_os_versions'

** 解决方式:**

  • 注释掉就行



image.png


报错16:'objc-shared-cache.h' file not found


同样是找到文件位置,objc-shared-cache.h文件在dyld-852.2/include目录下。


解决方式:


  1. objc-shared-cache.hdyld-852.2/include目录下copy到JQDependencies/目录下
报错17:'objc-bp-assist.h' file not found

解决方式:


  • 注释掉objc-bp-assist.h这个文件的引用
报错18:Use of undeclared identifier 'dyld_platform_version_macOS_10_13'

解决方式:


  • 注释掉该段代码


image.png

报错19:Use of undeclared identifier 'dyld_platform_version_macOS_10_11'

解决方式:

  • 注释掉该段代码

image.png


报错20:Use of undeclared identifier 'dyld_fall_2018_os_versions'

解决方式:


  • 注释掉该段代码


image.png


image.png

报错21:'_simple.h' file not found


同样是找到文件位置,_simple.h'文件在libplatform-libplatform-220.100.1/private目录下。

解决方式:


  1. _simple.hlibplatform-libplatform-220.100.1/private目录下copy到JQDependencies/目录下
报错22:'os/linker_set.h' file not found

同样是找到文件位置,linker_set.h'文件在xnu-7195.141.2/bsd/sys目录下。

解决方式:

  1. linker_set.hxnu-7195.141.2/bsd/sys目录下copy到JQDependencies/os目录下
报错23:'Cambria/Traps.h' file not found

解决方式:


  • 文件开源网站找不到 ,选择注释头文件引用


image.png


报错24:'Block_private.h' file not foun


同样是文件缺失,Block_private.h这个文件在

libclosure-79/目录下


解决方式:


  1. Block_private.hlibclosure-79/目录下copy到JQDependencies/目录下
报错25:'kern/restartable.h' file not found

同样是文件缺失,restartable.h这个文件在

xnu-7195.141.2/osfmk/kern/目录下

解决方式:


  1. JQDependencies/目录下创建一个kern文件夹
  2. restartable.hxnu-7195.141.2/osfmk/kern/目录下copy到JQDependencies/kern/目录下


报错26:**Use of undeclared identifier 'oah_is_current_process_translated' 和

Use of undeclared identifier 'objc_thread_get_rip'**


image.png

解决方式:


  • objc_cache.mm文件中注释掉1121-1128行,保留1127行,如图:

image.png


报错27:'os/feature_private.h' file not found

解决方式:


  • 这个引用头文件直接注释掉

image.png

报错28:'os/reason_private.h' file not found

同样是文件缺失,reason_private.h这个文件在

xnu-7195.141.2/libkern/os/目录下


解决方式:


  1. reason_private.hxnu-7195.141.2/libkern/os/目录下copy到JQDependencies/os/目录下



相关文章
|
2月前
|
Java Android开发 Swift
安卓与iOS开发对比:平台选择对项目成功的影响
【10月更文挑战第4天】在移动应用开发的世界中,选择合适的平台是至关重要的。本文将深入探讨安卓和iOS两大主流平台的开发环境、用户基础、市场份额和开发成本等方面的差异,并分析这些差异如何影响项目的最终成果。通过比较这两个平台的优势与挑战,开发者可以更好地决定哪个平台更适合他们的项目需求。
122 1
|
3月前
|
IDE Android开发 iOS开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
【9月更文挑战第27天】在移动应用开发的世界中,Android和iOS是两个主要的操作系统平台。每个系统都有其独特的开发环境、工具和用户群体。本文将深入探讨这两个平台的关键差异点,并分析这些差异如何影响应用的性能、用户体验和最终的市场表现。通过对比分析,我们将揭示选择正确的开发平台对于确保项目成功的重要作用。
|
1月前
|
存储 人工智能 安全
【通义】AI视界|苹果停止签署iOS 18.0.1,升级用户无法降级
本文由通义自动生成,涵盖24小时内精选的五条科技资讯:奥特曼谈OpenAI未来发展方向,ChatGPT新搜索功能上线遇故障,Perplexity AI选举搜索面临挑战,马斯克谈特斯拉造手机的可能性,以及苹果停止签署iOS 18.0.1。更多精彩内容,欢迎访问通通知道。
|
3月前
|
IDE 开发工具 Android开发
安卓与iOS开发对比:平台选择对项目成功的影响
【9月更文挑战第10天】在移动应用开发的世界中,选择正确的平台是至关重要的。本文将深入探讨安卓和iOS这两大主要移动操作系统的开发环境,通过比较它们的市场份额、开发工具、编程语言和用户群体等方面,为开发者提供一个清晰的指南。我们将分析这两个平台的优势和劣势,并讨论如何根据项目需求和目标受众来做出最佳选择。无论你是初学者还是有经验的开发者,这篇文章都将帮助你更好地理解每个平台的特性,并指导你做出明智的决策。
|
3月前
|
Java 开发工具 Android开发
安卓与iOS开发:平台选择对项目成功的影响
在移动应用开发的浩瀚宇宙中,安卓和iOS两大星系璀璨夺目,各自拥有独特的光芒。本文将穿梭于这两个平台之间,探讨它们在开发环境、用户群体、成本效益等方面的差异,以及这些差异如何影响一个项目的航向和终点。我们将从初学者的视角出发,逐步深入,揭示选择合适平台的重要性,以及如何根据项目需求做出明智的选择。无论你是即将启航的新手开发者,还是已经在这片星海中航行的老手,这篇文章都将为你提供有价值的导航信息。
63 2
|
3月前
|
Java 开发工具 Android开发
探索安卓与iOS开发的差异:平台选择对项目的影响
在移动应用开发的广阔天地中,安卓和iOS两大平台各自占据着重要的位置。本文旨在深入探讨这两个平台在开发过程中的主要差异,包括编程语言、开发工具、用户界面设计、性能优化以及市场分布等方面。通过对比分析,我们将揭示平台选择如何影响项目规划、执行效率和最终成果,为开发者在选择适合自己项目需求的平台时提供参考依据。
|
4月前
|
IDE 开发工具 Android开发
探索安卓与iOS开发的差异:平台选择对项目成功的影响
在移动应用开发的广阔天地中,安卓和iOS两大平台各领风骚,引领着技术进步的潮流。本文旨在深入剖析这两个平台在开发过程中的关键差异点,包括编程语言、开发工具、用户界面设计以及市场分布等方面。通过对比分析,我们不仅能更好地理解每个平台的独特优势,还能洞察这些差异如何影响项目决策和最终成果。无论你是开发者还是企业决策者,了解这些内容都将助你一臂之力,在选择适合自己项目的开发平台时做出更明智的决策。
|
4月前
|
IDE 开发工具 Android开发
探索iOS与安卓开发的差异:平台选择对项目成功的影响
【8月更文挑战第22天】在数字化时代,移动应用成为企业和个人展示创意、提供服务的重要工具。iOS和安卓作为两大主流平台,各自拥有独特的优势和限制。本文将深入探讨这两个平台在开发过程中的主要差异,以及这些差异如何影响项目规划、用户体验和市场策略。通过比较分析,旨在为开发者和企业决策者提供有价值的见解,帮助他们根据项目需求做出明智的平台选择。