objc4源码编译与调试

objc4-787.1源码编译调试避坑 由于最近在看iOS底层原理的东西,于是想把objc的源码下载下来编译调试,但是过程是曲折的,下载下来以后遇到了各种问题,现贴出来解决过程,也帮助各位同样想编译调试objc源码的小伙伴更快的运行起来,话不多说,开始吧~ ■首先,要先把objc4的源码下载下来,这里贴个网址:https://opensource.apple.com 根据自己的mac电脑系统版本选择对应的链接点进去,我的是10.15.7,就选择10.15.6就好了~ 进入后command+f 搜索 “objc4”点击右侧下载即可。 阅读详情

源码下载

在Apple Open Source上选择对应自己的macOS版本下,下载objc4即可。

笔者是macOS Catalina 10.15.6,所以选择的是objc4-787.1版本,顺便在该页面中下载Libc,dyld,libauto,libclosure,libdispatch,libpthread,xnu,libplatform这几个依赖库,编译objc4的时候需要用到。

解决编译错误

下载完成,解压之后我们打开工程文件,运行报错unable to find sdk 'macosx.internal'

unable to find sdk 'macosx.internal'

解决方法:Project->Target->Build Settings->Base SDK选择macOS

解决unable to find sdk 'macosx.internal'

再次运行报错'sys/reason.h' file not found

'sys/reason.h' file not found

在项目目录下新建include/sys文件夹,将xnu-6153.141.1/bsd/sys/reason.h添加到该目录下再次编译。

这次报错是还是在objc-os.h文件中,提示'mach-o/dyld_priv.h' file not found'mach-o/dyld_priv.h' file not found

解决方法和上面一样,该文件在dyld-750.6/include/mach-o/dyld_priv.h路径。

运行后提示'os/lock_private.h' file not found,该文件在libplatform-220.100.1/private/os/lock_private.h路径,之后报错'os/base_private.h' file not found,也在该目录下。

再次运行后报错'pthread/tsd_private.h' file not found,该文件在libpthread-416.100.3/private/tsd_private.h

再次运行后报错'System/machine/cpu_capabilities.h' file not found, 该文件在 xnu-6153.141.1/osfmk/machine/cpu_capabilities.h路径。

之后是报错'os/tsd.h' file not found,该文件在xnu-6153.141.1/libsyscall/os/tsd.h路径。

报错'pthread/spinlock_private.h' file not found,该文件在 libpthread-416.100.3/private/spinlock_private.h路径。

报错'System/pthread_machdep.h' file not found,该文件在只能在8.x级以前的版本中找到,LibC下载。

路径为 Libc-825.26/pthreads/pthread_machdep.h)。该文件导入后会发现重复声明的报错以及宏定义重复的警告,报错为:

Typedef redefinition with different types ('int' vs 'volatile OSSpinLock' (aka 'volatile int'))

Static declaration of '_pthread_has_direct_tsd' follows non-static declaration

Static declaration of '_pthread_getspecific_direct' follows non-static declaration

Static declaration of '_pthread_setspecific_direct' follows non-static declaration

注释掉重复声明

注释重复声明2

注释重复声明3

注释重复宏1

注释重复宏3

再次运行报错'CrashReporterClient.h' file not found,该文件在Libc-825.26/include/CrashReporterClient.h

报错'_simple.h' file not found,该文件在libplatform-220.100.1/private/_simple.h路径。

报错'objc-shared-cache.h' file not found,该文件在dyld-750.6/include/objc-shared-cache.h路径。

报错Use of undeclared identifier 'DYLD_MACOSX_VERSION_10_11',在dyld_priv.h文件中添加下面的宏定义

#define DYLD_MACOSX_VERSION_10_11 0x000A0B00
#define DYLD_MACOSX_VERSION_10_12 0x000A0C00
#define DYLD_MACOSX_VERSION_10_13 0x000A0D00
#define DYLD_MACOSX_VERSION_10_14 0x000A0E00

 

报错Static_assert failed due to requirement 'bucketsMask >= ((unsigned long long)140737454800896ULL)' "Bucket field doesn't have enough bits for arbitrary pointers.", 直接注释掉该断言。

报错Use of undeclared identifier 'CRGetCrashLogMessage',解决方法在Project->Target->Build Settings->Preprocessor Macros加入LIBC_NO_LIBCRASHREPORTERCLIENT

设置Preprocessor Macros

报错Mismatch in debug-ness macros,解决方法是将改行代码注释掉

报错'kern/restartable.h' file not found, 该文件在xnu-6153.141.1/osfmk/kern/restartable.h路径。

报错'Block_private.h' file not found,该文件在libclosure-74/Block_private.h路径。

报错can't open order file: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk/AppleInternal/OrderFiles/libobjc.order,解决方法是Project->Target->Build Settings->Order File添加路径$(SRCROOT)/libobjc.order。

报错library not found for -lCrashReporterClient,解决方法是在Project->Target->Build Settings->Other Linker Flags中删除lCrashReporterClient。

报错'_static_assert' declared as an array with a negative size,解决方法是直接注释掉该断言。

报错xcodebuild:1:1: SDK "macosx.internal" cannot be located.,解决方法 修改Project->Target->Build Settings->Run Script(markgc) 中的macosx.internal,改为macosx。

到了这里我们发现已经可以BUILD SUCCESSED了。

新建调试

我们新建一个target:

新建target

再为新建的Target添加好依赖

为新建的target添加依赖

这时候我们创建一个Person类,在main.m中导入头文件

导入Person类

这时候我们发现断点无法使用,解决方案:

移动main.m文件

这时候再次运行会发现虽然断点生效了,但是无法进入alloc方法的实现,解决方案:

设置Enable Hardened Runtime

到这里就大功告成了。objc4-787.1调试demo

iOS 底层原理03:objc4-781 源码编译 & 调试 iOS-底层原理 01:源码探索的三种方式 iOS-底层原理 02:alloc & init & new 源码分析 iOS 底层原理03:objc4-781 源码编译 & 调试 本文主要是通过将objc4-781的源码编译成功,然后在源码中进行调试,便于跟踪方法的底层实现流程 准备工作 环境版本 & 最新objc源码 mac OS 10.15 Xcode 11.4 objc4-781 依赖文件下载 需要下载以下依赖文件 其中除了其中 launchd-106.10 . 阅读详情

相关推荐

objc - 编译Runtime源码objc4-706

其实编译Runtime源码objc4-706,跟objc - 编译Runtime源码objc4-680是大同小异的。这里也简单写一下吧,如果大家编译过objc4-680,相信下面的步骤是很熟悉的。

WOTors 5831

iOS底层探索之Block(四)——Block的探索和源码分析

Block的本质是什么吗?__Block底层又做了什么呢? 在上一篇篇博客中,已经探索到block的本质是结构体(__main_block_impl_0)继承自__block_impl,block可以捕获外部变量,通过__block修饰内部可以变更外部变量的值。 那么本篇博客将对继续对block的底层原理进行分析。 iOS底层探索之Block(一)——初识Block(你知道几种Block呢?) iOS底层探索之Block(二)——如何解决Block循环引用问题? iOS底层探索之Block(三)——Blo

俊而不逊的博客 848

block官方源码

苹果官方的block源码,libclosure-38文件。包含Block,Block_private,BlockImplementation等文件

iOS开发报错-Library not loaded: /usr/lib/libauto.dylib

错误信息: Library not loaded: /usr/lib/libauto.dylib 解决方法: sudo mkdir '/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 9.3.simruntime/Contents/Resources/RuntimeRoot/usr/lib/swift' ...

嘿嘿嘿 1433

libclosure-开源

libclosure是一个小型库,它允许C程序创建带有数据的函数。

objc4-818.2

objc4-818.2 这里总结了自己写的一些关于iOS原理的文章,基于objc4-818.2最新源码分析,会不定时更新。如果文章哪里有错误麻烦在评论区指出,若觉得有帮助,请多多点赞 对象原理 的iOS之武功秘籍①:OC对象原理-上(ALLOC&INIT&新) 的iOS之武功秘籍②:OC对象原理-中(内存对齐和malloc的源码分析) 的iOS之武功秘籍③:OC对象原理-下(ISA的初始化和指向分析与对象的本质) 对象的本质 iOS之武功秘籍④:类结构分析 缓存原理 iOS之武功秘籍⑤:cache_t分析 方法与消息 iOS之武功秘籍⑥:运行时之方法与消息 类的加载 iOS之武功秘籍⑦:dyld加载流程-应用程序的加载 iOS之武功秘籍⑧:类和分类加载过程 iOS之武功秘籍⑨:类扩展与关联对象 iOS之武功秘籍⑩:OC过渡翻译 KVC,KVO 多线程 堵塞 LLVM编译流程与Clang插件

_OBJC_CLASS_$_ errors 错误解决办法

先给大家看一下原作者的 http://blog.sina.com.cn/s/blog_4fcd1ea30100zw6i.html There are mainly two reasons why this occurs. The first being that you have forgotten to include a framework that you are

抱妹纸于胸怀,深藏功与名 1万+

libclosure-74-KCBuild:libclosure-74编译-最新的Block内置二进制编译,大家可以轻松地进行Block的原始调试。View_Block_copy还有__block可以操作..

libclosure-74-构建 Block充满原始想想必大家已经非常熟悉了,但是估计有很多人不知道怎么去看,什什者不知道在哪! 这里首先感谢苹果开源了: 尽管已经开源,但是对于像我这样的懒人来说,这个还是有点不方便理解! 所以今天休闲之余索性就把libclosure-74给编译了,方便大家学习 下载通道: :backhand_index_pointing_down:我们看看效果吧 :warning:大家Github下载下来注意一下: 1:工程如果存在文件找不到就看看Build settting settting的Header Search Paths是否是相对路径 2:下载的工程描述文件可能无法匹配,大家调整一下 3:如果新建目标,需要添加依赖:块 4:编译成功不进源码: Build settting -> Enable Hardened Runtime ->否 其他应该没有什么问题(如果有的话提issure我看到会第一时间回复你),大家愉快的去玩

探索objc4:Objective-C运行时库的秘密武器

当你在iOS和macOS开发中深入到Objective-C的世界时,项目是一个不可或缺的资源。这是一个开源的实现,揭示了Objective-C运行时库的内部工作原理,由Apple Inc.官方维护,并由秀屿(Show Xu)在此处提供镜像。 ## 项目简介 `objc4`项目是Objective-C语言的基础组成部分之一,它提供了运行时支持,包括类、对象的创建与管理,消息传递机制,以及其他一些

gitblog_00027的博客 448

别再让CPU干GPU的活了:CST Studio Suite GPU加速深度调优指南(从驱动版本到任务管理器监控)

本文深入探讨了CST Studio Suite的GPU加速深度调优方法,从NVIDIA驱动版本选择到系统级资源管理,再到实时监控与瓶颈诊断技术。通过科学的驱动优化、GPU资源管理策略和高级调优技巧,显著提升仿真效率,特别适合电磁仿真工程师和硬件加速需求的专业用户。

weixin_28740299的博客 166

实战教程:用DETR+超分辨率搞定红外小目标检测(附完整代码)

本文提供了一套完整的红外小目标检测实战方案,通过融合EDSR超分辨率技术与改进型DETR深度学习算法,有效解决了红外图像中小目标检测的难题。文章详细介绍了从环境搭建、数据预处理、模型定制(如引入EMA注意力与S2特征层)到训练调优的全流程,并附有完整代码,旨在帮助开发者将前沿算法高效落地于安防、自动驾驶等实际场景。

weixin_29057163的博客 532

objc - 编译Runtime源码objc4-680

从苹果开源网站上,我们可以找到很多有意思的开源项目。objc4是其中一个,也即我们通常说的Runtime源码,我们遇到的libobjc.A.dylib就是用它编译出来的。 而这篇文章的目的,就是教你从苹果提供的Runtime源码,编译出自己的libobjc.A.dylib。进而你可以调试它,深入了解它。

WOTors 1万+

Copula函数实战:如何用MATLAB计算气象干旱与农业干旱的联合概率?

本文提供了一份基于MATLAB的Copula函数实战指南,详细阐述了如何利用该多变量联合分布函数计算气象干旱与农业干旱的联合概率及条件概率。通过从数据预处理、边缘分布拟合到Copula模型选择与检验的完整流程,帮助环境科学与农业气象研究者量化干旱事件的关联风险,为风险评估提供定量依据。

weixin_29213655的博客 431

objc4-841.13可调试/编译源码更新

心心念念查看了下objc4源码 https://opensource.apple.com/releases/ ,果然更新了,果断编译调试如果想最省时省力,直接 github 下载可编译源码下面开始配置可编译环境(本次配置为M1)首先确保下载到841.13源码 gg搜索 os/variant_private.h opensource.apple.com得到结果 https://opensource.apple.com/source/Libc/Libc-1244.50.9/os/variant_priva...

coding不死,也未曾凋零 7195

手机摄影新宠:In-line Hardware EIS如何让你的4K视频稳如鸡头(附实测对比)

本文深入解析了手机摄影中的In-line Hardware EIS(硬件级行内电子图像稳定)技术。通过对比传统软件EIS,阐述了其通过硬件管道实时处理实现极低延迟、减少画面裁切和有效抑制果冻效应的核心优势,并结合4K视频的日夜间实测,展示了该技术如何让手持拍摄的视频“稳如鸡头”,显著提升创作体验与成片质量。

tree的博客 998

把事务数据变成可分析数据:用 ABAP CDS 构建 Cube View 与 Query View,并拆解 OData 取数的底层路径

ABAP CDS分析建模:Cube与Query视图的实践解析 本文探讨了ABAP CDS分析建模中Cube View与Query View的核心区别与应用场景: 架构定位 Cube View作为分析型数据源,定义维度和度量的基础语义 Query View作为消费投影,控制查询可见字段和聚合逻辑 关键实现 通过@Analytics.dataCategory: #CUBE声明分析数据源 使用@DefaultAggregation确保指标口径一致性 @Analytics.query: true启用分析引擎特性 运

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 141

KCObjc4_debug完全指南:让苹果objc源码编译调试不再是难题

你是否曾经想深入了解Objective-C的底层实现,却苦于无法调试苹果官方的objc4源码?😫 KCObjc4_debug项目为你解决了这个难题!这个开源项目提供了**可编译的苹果官方objc源码**,让你能够像调试自己的代码一样自由地使用LLDB调试Objective-C运行时库。🎉 ## 🔍 什么是KCObjc4_debug? KCObjc4_debug是一个精心配置的苹果objc

gitblog_07865的博客 275

智能制造——解读AI+工业设备预测性维护解决方案【附全文阅读】

摘要:本方案面向设备密集型制造企业,提供基于AI的预测性维护解决方案。通过工业物联网、大数据和AI算法,整合传感器数据与专家知识库,构建异常检测、故障诊断等模型,实现设备台账管理、智能点检等核心功能。方案配套软硬件工具矩阵,已在锂电子等行业落地应用,可降低维护成本30%以上,减少非计划停机50%,助力企业智能化转型。

cdfunlove的博客 141

gh_mirrors/ob/objc4实战指南:如何编译调试Objective-C运行时源码

Objective-C作为iOS和macOS开发的基石,其运行时系统(objc4)是理解面向对象特性和内存管理的核心。本指南将带你从零开始编译调试gh_mirrors/ob/objc4项目,掌握Objective-C运行时的底层实现原理。 ## 📋 环境准备与源码获取 首先需要准备编译环境,确保系统已安装Xcode命令行工具和必要的依赖库。通过以下命令克隆项目源码: ```bash git

gitblog_00442的博客 445

银行统一监管报送系统

依据《银行业金融机构数据治理指引》,银行业金融机构应当建立适应监管数据报送工作需要的信息系统,实现流程控制的程序化,提高监管数据加工的自动化程度。银行业金融机构应当将监管数据纳入数据治理,建立工作机制和流程,确保监管数据报送工作有效组织开展,监管数据质量持续提升。银行通常要对接报送EAST5.0、1104、CRSS等近40个监管应用,涉及近1000张报表。表13-01是主要的监管报送应用、报送依据、报送规范、监管机构名称。

银行信息系统应用架构详解 4350

基于Xilinx XDMA 的PCIE通信

基于Xilinx XDMA 的PCIE通信 概述:   想实现基于FPGA的PCIe通信,查阅互联网各种转载…基本都是对PCIe的描述,所以想写一下基于XDMA的PCIe通信的实现(PCIe结构仅做简单的描述(笔记),了解详细结构移至互联网)。实践实践!!! 说明: 参考文档: PCI Express Base Specification Revision 3.0 PCI Express Base Specification Revision 5.0 pg195-pcie-dma PCI Express体系

Crazzy_M的博客 1万+

objc4-818.2编译踩坑总结篇

关于objc4源码的编译、以后还会出新版、如果自己想最先常鲜、需要自己玩一遍、以后自己就学到手咯。 “内容不重要 分析思维探索的角度”很重要!!!圈住了! 1、关于objc4源码问题 可在Github处下载编译完成的源码 2、手动体验源码编译过程 苹果原版源码下载地址、 macOS 11.3系统下的objc4-824未下载下来、获取11.2系统下的 objc4-818.2版本 3、源码需要的部分系统文件 源码获取下来后将面临一系列各个系统库获取的头文件缺失的报错问题、根据750、781等版本编译问题.

Holothurian 1340

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

从0到1精通KCObjc4_debug:解锁objc源码调试的完整攻略

KCObjc4_debug是一个专注于提供可编译苹果官方源码的项目,包含objc4底层源码以及libmalloc等可编译版本,让开发者能够自由进行LLDB调试,深入了解Objective-C运行时机制。 ## 📚 项目核心价值:为什么选择KCObjc4_debug? 对于iOS/macOS开发者而言,深入理解Objective-C运行时是提升技术深度的关键。然而苹果官方源码通常难以直接编译和

gitblog_00869的博客 281

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

KCObjc4_debug常见问题解答:从编译错误到调试技巧的终极指南

KCObjc4_debug是一个专注于提供可编译苹果官方objc源码的项目,包含多个版本的objc4底层源码及libmalloc等可编译版本,让开发者能够自由进行LLDB调试。本文将为你解答使用过程中可能遇到的常见问题,助你顺利编译和调试objc源码。 ## 一、项目介绍 KCObjc4_debug项目致力于为开发者提供苹果官方objc源码的可编译版本,目前包含objc4-750、objc4-

gitblog_00931的博客 1025

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

2023最新版KCObjc4_debug使用手册:从下载到调试的全流程

KCObjc4_debug是一款专为开发者打造的苹果官方源码调试工具,提供了可编译的objc4底层源码及libmalloc等组件,支持自由LLDB调试,帮助开发者深入理解Objective-C运行时机制。本文将带你完成从项目下载到源码调试的完整流程,让你轻松上手这款强大的开发工具。 ## 📋 准备工作:环境与依赖 在开始使用KCObjc4_debug前,请确保你的开发环境满足以下要求: -

gitblog_00609的博客 726

揭秘KCObjc4_debug:让iOS底层开发变得触手可及的开源项目

KCObjc4_debug是一个专注于提供可编译苹果官方源码的开源项目,包含objc4底层源码及libmalloc等可编译版本,让开发者能够自由进行LLDB调试,轻松探索iOS底层开发的奥秘。 ## 🚀 项目核心价值:告别源码编译难题 对于iOS开发者而言,研究苹果官方源码是提升技术深度的重要途径,但源码编译往往是一道难以逾越的障碍。KCObjc4_debug项目的出现,彻底解决了这一痛点,

gitblog_02684的博客 1114
上一篇: 使用SourceTree拉取代码出现Permission denied (publickey)
下一篇: iOS触摸事件理解
zZZ浮生
博客等级 码龄11年 12粉丝 70原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值