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/目录下



相关文章
|
1月前
|
语音技术 开发工具 图形学
Unity与IOS⭐一、百度语音IOS版Demo调试方法
Unity与IOS⭐一、百度语音IOS版Demo调试方法
|
9天前
|
IDE 开发工具 Android开发
安卓与iOS开发对比:平台选择对项目成功的影响
【9月更文挑战第10天】在移动应用开发的世界中,选择正确的平台是至关重要的。本文将深入探讨安卓和iOS这两大主要移动操作系统的开发环境,通过比较它们的市场份额、开发工具、编程语言和用户群体等方面,为开发者提供一个清晰的指南。我们将分析这两个平台的优势和劣势,并讨论如何根据项目需求和目标受众来做出最佳选择。无论你是初学者还是有经验的开发者,这篇文章都将帮助你更好地理解每个平台的特性,并指导你做出明智的决策。
|
12天前
|
Java 开发工具 Android开发
安卓与iOS开发:平台选择对项目成功的影响
在移动应用开发的浩瀚宇宙中,安卓和iOS两大星系璀璨夺目,各自拥有独特的光芒。本文将穿梭于这两个平台之间,探讨它们在开发环境、用户群体、成本效益等方面的差异,以及这些差异如何影响一个项目的航向和终点。我们将从初学者的视角出发,逐步深入,揭示选择合适平台的重要性,以及如何根据项目需求做出明智的选择。无论你是即将启航的新手开发者,还是已经在这片星海中航行的老手,这篇文章都将为你提供有价值的导航信息。
26 2
|
17天前
|
Java 开发工具 Android开发
探索安卓与iOS开发的差异:平台选择对项目的影响
在移动应用开发的广阔天地中,安卓和iOS两大平台各自占据着重要的位置。本文旨在深入探讨这两个平台在开发过程中的主要差异,包括编程语言、开发工具、用户界面设计、性能优化以及市场分布等方面。通过对比分析,我们将揭示平台选择如何影响项目规划、执行效率和最终成果,为开发者在选择适合自己项目需求的平台时提供参考依据。
|
29天前
|
IDE 开发工具 Android开发
探索安卓与iOS开发的差异:平台选择对项目成功的影响
在移动应用开发的广阔天地中,安卓和iOS两大平台各领风骚,引领着技术进步的潮流。本文旨在深入剖析这两个平台在开发过程中的关键差异点,包括编程语言、开发工具、用户界面设计以及市场分布等方面。通过对比分析,我们不仅能更好地理解每个平台的独特优势,还能洞察这些差异如何影响项目决策和最终成果。无论你是开发者还是企业决策者,了解这些内容都将助你一臂之力,在选择适合自己项目的开发平台时做出更明智的决策。
|
29天前
|
IDE 开发工具 Android开发
探索iOS与安卓开发的差异:平台选择对项目成功的影响
【8月更文挑战第22天】在数字化时代,移动应用成为企业和个人展示创意、提供服务的重要工具。iOS和安卓作为两大主流平台,各自拥有独特的优势和限制。本文将深入探讨这两个平台在开发过程中的主要差异,以及这些差异如何影响项目规划、用户体验和市场策略。通过比较分析,旨在为开发者和企业决策者提供有价值的见解,帮助他们根据项目需求做出明智的平台选择。
|
1月前
|
Java Android开发 iOS开发
探索安卓与iOS开发的差异:平台选择对项目成功的影响
在移动应用开发的世界中,选择正确的平台是关键。本文通过比较安卓和iOS开发的核心差异,揭示平台选择如何影响应用的性能、用户体验和市场覆盖。我们将深入探讨各自的开发环境、编程语言、用户界面设计原则以及发布流程,以帮助开发者和企业做出明智的决策。
55 9
|
1天前
|
开发框架 数据可视化 Java
iOS开发-SwiftUI简介
iOS开发-SwiftUI简介
|
7天前
|
API Android开发 iOS开发
安卓与iOS开发中的线程管理对比
【9月更文挑战第12天】在移动应用的世界中,安卓和iOS平台各自拥有庞大的用户群体。开发者们在这两个平台上构建应用时,线程管理是他们必须面对的关键挑战之一。本文将深入探讨两大平台在线程管理方面的异同,通过直观的代码示例,揭示它们各自的设计理念和实现方式,帮助读者更好地理解如何在安卓与iOS开发中高效地处理多线程任务。
|
9天前
|
开发框架 Android开发 iOS开发
探索安卓与iOS开发的差异:构建未来应用的指南
在移动应用开发的广阔天地中,安卓与iOS两大平台各占半壁江山。本文将深入浅出地对比这两大操作系统的开发环境、工具和用户体验设计,揭示它们在编程语言、开发工具以及市场定位上的根本差异。我们将从开发者的视角出发,逐步剖析如何根据项目需求和目标受众选择适合的平台,同时探讨跨平台开发框架的利与弊,为那些立志于打造下一个热门应用的开发者提供一份实用的指南。
24 5