首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

dyld:惰性符号绑定失败:找不到符号:_clock_gettime

这是一个错误信息,表示在动态链接器(dyld)加载可执行文件时,无法找到名为_clock_gettime的符号。该错误通常发生在程序依赖的库或框架中缺少所需的符号时。

_clock_gettime是一个用于获取系统时间的函数,它通常用于计时、性能分析和时间相关的操作。该函数在不同的操作系统和平台上可能有不同的实现。

解决此错误的方法可能因具体情况而异,以下是一些可能的解决方案:

  1. 确保所需的库或框架已正确安装并可访问。检查相关的依赖项是否已正确配置,并确保它们的路径正确。
  2. 检查编译选项和链接选项是否正确设置。确保在编译和链接过程中正确地包含了所需的库和头文件。
  3. 检查操作系统和平台的兼容性。某些函数可能在特定的操作系统版本或平台上不可用。确保代码在目标平台上是可执行的。
  4. 更新相关的库或框架版本。有时,旧版本的库可能不包含所需的符号。尝试更新库或框架到最新版本,以确保符号可用。
  5. 如果使用的是第三方库或框架,查阅其文档或社区支持,以获取更多关于该错误的解决方案。

腾讯云相关产品和产品介绍链接地址:

腾讯云提供了丰富的云计算产品和服务,包括计算、存储、数据库、人工智能等。以下是一些与云计算相关的腾讯云产品和对应的介绍链接:

  1. 云服务器(CVM):提供弹性计算能力,可根据需求快速创建和管理虚拟机实例。了解更多:https://cloud.tencent.com/product/cvm
  2. 云数据库MySQL版(CDB):提供高性能、可扩展的关系型数据库服务,适用于各种应用场景。了解更多:https://cloud.tencent.com/product/cdb_mysql
  3. 人工智能机器学习平台(AI Lab):提供丰富的人工智能算法和模型,帮助开发者快速构建和部署机器学习应用。了解更多:https://cloud.tencent.com/product/ailab

请注意,以上链接仅供参考,具体的产品选择应根据实际需求和情况进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【IOS开发高级系列】dyld专题

bind_off与bind_size存储了进程的符号绑定信息,当进程启动时必须绑定这些符号,典型的有dyld_stub_binder,该符号dyld用来做迟绑定加载符号,一般动态库都包含该符号。        ...弱符号主要用于面向对旬语言中的符号重载,典型的有c++中使用new创建对象,默认情况下会绑定ibstdc++.dylib,如果检测到某个映像使用弱符号引用重载了new符号dyld则会重新绑定符号并调用重载的版本...,然后挨个对它们进行绑定绑定操作具体使用bindAt()函数,它主要通过调用resolve()解析完符号表后,调用bindLocation()完成最终的绑定操作,需要绑定符号信息有三种: BIND_TYPE_POINTER...2.4.8 第七步,执行弱符号绑定         weakBind()函数执行弱符号绑定。...在所有拥有延迟加载符号的Mach-O文件里,它的符号表中一定有一个dyld_stub_helper符号,它是延迟符号加载的关键!延迟绑定符号的修正工作就是由它完成的。

65660

Apple 操作系统可执行文件 Mach-O

所需各种数据,比如符号表、间接符号表、rebase 操作码、绑定操作码、导出符号、函数启动信息、数据表、代码签名等。...动态链接器通过 dyld_stub_binder 调用,这个函数的参数不直接指定要绑定符号,而是通过给 dyld_stub_binder 偏移量到 dyld 解释的特殊字节码 Segment 中。...通过 dyld 加载主程序链接到的所有依赖库,执行符号绑定也就是non lazy binding。绑定解析其他模块的功能和数据的引用过程,也叫导入符号。...通过构建时的选项设置,dyld 可以即时绑定,也叫延迟绑定,首次使用引用时的绑定,在使用符号前不会将程序的引用绑定到共享库的符号。...根据 Code Fragment Manager 设计的弱引用允许程序有选择的绑定到指定的共享库,如果 dyld 找不到弱引用的定义,会设置为 NULL,然后可以继续加载程序。

2.8K10

HOOK原理

在运行时,dyld符号绑定真实函数地址。对于代码段来说,并没有任何改变。 故此,外部调用函数,并不是直接地址访问,而是通过符号找到地址。这跟OC中SEL与IMP的对应关系非常相似。...这里是指向dyld_stub_binder函数,该函数是用于符号绑定的。 【9】dyld_stub_binder也是外部函数,它的地址是如何找到的?...,会绑定非懒加载符号和弱引用符号,所以dyld_stub_binder函数的值,在程序启动时被dyld直接绑定。...【第三步】当首次调用外部符号时,符号对应的函数地址是一个占位地址,指向__stubs_helper中的代码,会通过调用dyld_stub_binder函数,执行符号绑定。...【第四步】当再次加载NSLog时,由于已经完成符号绑定,因此,符号对应的函数地址不再是一个占位地址,而是NSLog函数的真实地址。

1K20

iOS底层原理之LLVM & Clang

输出结果如下: 可以看到执行命令后,报了一个错:找不到外部的_printf符号。...同时还多了一个dyld_stub_binder符号,其实只要链接就会有这个符号,这个符号是负责动态绑定的,在Mach-O进入内存后(即执行),dyld立刻将libSystem中dyld_stub_binder...dyld_stub_binder符号是非懒绑定。...其他的懒绑定符号,比如此处的_printf,在首次使用的时候通过dyld_stub_binder来将真实的函数地址与符号进行绑定,调用的时候就可以通过符号找到对应库里面的函数地址进行调用了。...外部函数绑定图解: 链接和绑定的区别: 链接,编译时,标记符号在哪个库,只是做了一个标记。 绑定,运行时,将外部函数地址与Mach-O中的符号进行绑定。 使用如下命令执行Mach-O文件: .

1.4K10

fishhook详解

符号)的指向进行一一赋值,这也就是所谓的“符号绑定”,这样的话,它们就能知道自己指向共享缓存库中的哪一个地址上面了。...这里讲到了符号符号绑定,说句题外话,我们在Bugly或者阿里云Crash分析这样的平台上上传的符号表,实际上其记录的就是MachO的Data数据段的特殊区域里面存储的用于记录外界函数的指向的指针与共享缓存库中对应的函数地址的对应关系...在编译的时候让MachO的Data段中的NSLog对应的符号指向my_nslog;在DYLD动态链接的时候,会进行符号绑定,此时将共享缓存库中的地址绑定到sys_nslog函数地址上面。...所以说,fishhook的本质就是符号的重绑定,也正因为如此,用于交换的那个函数的命名是rebind_symbols: ?...原因就在于testFunc函数没有使用PIC技术,testFunc函数是写在自己的程序中的,它在一开始编译的时候其地址就确定了,它在MachO的Data端里面没有所谓的符号,所以也就没有接下来的符号绑定

1.5K10

iOS 程序 main函数之前发生什么

程序执行中负责绑定lazy符号、提供runtime dynamic loading services、提供调试器接口。 7....其主要有对image进行load(加载)、rebase(基地址复位),bind(外部符号绑定),我们可以查看源码: link方法.png recursiveLoadLibraries(context...除了runtime环境的初始化外,_objc_init中绑定了新image被加载后的callback: dyld_register_image_state_change_handler( dyld_image_state_bound...0, &load_images); 可见dyld担当了runtime和imageLoader中间的协调者,当新image加载进来后交由runtime去解析这个二进制文件的符号表和代码。...交由imageLoader读取image,其中包含了我们的类,方法等各种符号 3.由于runtime向dyld绑定了回调,当image加载到内存后,dyld会通知runtime进行处理 4. runtime

82510

启动时间的一些分析

1、解析Mach-O文件的头部,找到​LC_LOAD_DYLINKER,定位到dyld的路径,将dyld加载到内存中; ? 2、解析动态库的依赖,比如说我们工程中这部分依赖; ?...,为xcode链接过程提供符号;App真正运行的时候,还需要加载动态库,进行真正的链接;(动态链接的了解可以看前文) ?...5、符号绑定和重定向,动态链接与静态链接一样,符号最终都需要转换为运行时的内存地址;动态库的符号需要运行时,才能确定所有符号的具体位置;还有另外一个影响的因素是iOS的ASLR(进程地址空间布局随机化)...iOS 13之后,系统提供的dyld3将启动过程的解析Mach-O文件的头部、解析动态库的依赖、符号查找定位的结果做了一个缓存,写到是disk中。...在启动时候,就直接读取缓存并校验是否有效,再进行后续的动态库加载、符号绑定和重定向以及静态初始化。 ​

1.3K20

Mach-O相关概念

LC_DYSYMTAB 动态符号表信息 LC_LOAD_DYLINKER 标明我们的MachO是被谁加载进去的,即动态加载连接器dyld LC_UUID 标示该二进制文件唯一的 UUID,..._la_symbol_ptr lazy-binding的指针表,每个表项中的指针一开始指向stub_helper DATA.common 没有初始化过的符号声明 利用dyld调用__mod_init_func...Bind - 由于符号在不同的库里面,所以需要符号绑定(Bind)这个过程。 binding相对rebasing较复杂一些,它多了查找依赖库的部分,不过总体协议是相似的。...在ObjC中,类继承关系以及protocol等是non-lazy的,启动时就需要开始绑定,而在函数里的调用外部函数等等都是lazy binding的,在第一次调用时才会进行绑定。...以上步骤由 dyld 启动 libSystem.dylib 统一对基础库进行调用执行,这里面就包含了 libobjc 的 Runtime,同时 Runtime 会在 dyld 绑定回调,当 dyld 处理完相关数据后就会调用

91710

iOS 优化 - 启动优化

这一步是加载环境变量DYLD_INSERT_LIBRARIES中配置的动态库,dyld 负责。 fixup:rebase(偏移修正)/ binding(符号绑定) 链接主程序。...执行弱符号绑定 Objc setup & initializer Objc setup initializer 初始化 Objective-C Runtime(包括 ObjC 相关 Class 的注册、...这时候就需要 Binding 操作,dyld 会根据符号表去找到相应函数和变量地址,Binding 解决了修正外部指针指向的问题。...例如程序中调用NSLog方法,在编译时期生成的 mach-o 文件中,会创建一个符号 NSLog(目前指向一个随机的地址),然后在运行时(从磁盘加载到内存中,是一个镜像文件),会将真正的地址给符号(即在内存中将地址与符号进行绑定...,是 dyld 做的,也称为动态库符号绑定),一句话概括:绑定就是给符号赋值的过程。

3.8K20

深入浅出MachO

提供能够加载目标MachO所需要的必要信息: 因为可能加载到随机地址,所以需要rebase信息;如果进程依赖其他镜像的符号,则绑定需要bind信息;对于C++程序而言可能需要weak bind实现代码/...数据复用;对于一些外部符号不需要立即绑定的可以延时加载,这就需要lazy bind信息;对于导出符号也需要对应的export信息。...以延时绑定为例,操作符看起来是这样: opcode.png 其表达的实际含义用中文来描述就是: _printf符号(来自libSystem.B.dylib)延时绑定到0x1018偏移地址; _set_foo...符号(来自libfoo.dylib)延时绑定到0x1020偏移地址; 其中0x1018/0x1020地址在__DATA段,更准确来说是在__la_symbol_ptr这个section中,可以自行编译验证...dyld的起始地址固定为0x1000,这个地址对应的符号是__dyld_start,文件定义在src/dyldStartup.s。

86830

iOS App启动过程

总结来说,大体分为如下步骤: (1) 系统为程序启动做好准备 (2) 系统将控制权交给 DyldDyld 会负责后续的工作 (3) Dyld 加载程序所需的动态库 (3) Dyld 对程序进行 rebase...这就保证了在dyld进行加载的时候,可以对每一个page进行独立的验证。 mach-o中有很多符号,有指向当前mach-o的,也有指向其他dylib的,比如printf。...dyld这时候需要做一些fix-up工作,即帮助应用程序找到这些符号的实际地址。主要包括两部分 Rebase 修正内部(指向当前mach-o文件)的指针指向 Bind 修正外部指针指向 ?...Rebase解决了内部的符号引用问题,而外部的符号引用则是由Bind解决。在解决Bind的时候,是根据字符串匹配的方式查找符号表,所以这个过程相对于Rebase来说是略慢的。...Dyld 在 bind 操作结束之后,会发出 dyld_image_state_bound 通知,然后与之绑定的回调函数 map_2_images 就会被调用,它主要做以下几件事来完成 Objc Setup

2.1K30

OC底层探索16 -应用程序加载OC底层探索16 -应用程序加载

,基本上所有的进程都是动态链接的,所以 Mach-O 镜像文件中会有很多对外部的库和符号的引用,但是这些引用并不能直接用,在启动时还必须要通过这些引用进行内容填充,这个填充的工作就是由 dyld 来完成的...start 3.3 dyld::main函数 这就是dyld最重要的方法。...sInsertedDylibCount; ++i) { ImageLoader* image = sAllImages[i+1]; // 注册符号插入...image->registerInterposing(gLinkContext); } } } ...... // 第七步、 弱符号绑定...4、_objc_init调用时机 在3.5中提到了_objc_init中做了部分处理,只知道是在3.6 -doInitialization函数调用的,具体的调用时机需要在可执行的objc源码打下一个符号断定

37720

iOS逆向之Mach-O文件

__TEXT段[__TEXT段(segment)所包含的节(section)]本文章仅介绍常见的几个节:__text:主程序代码__stubs、__stubs_helper:帮助动态连接器dyld绑定符号...__objc_methtype:OC方法类型(方法签名)__const:const关键字修饰的只读常量__DATA段[__DATA段(segment)所包含的节(section)]__got:全局非懒绑定符号指针表...__la_symbol__ptr:懒绑定符号指针表__mod_init_func:C++类的构造函数__const:未初始化过的常量__cfstring:Core Foundation字符串__objc_classlist...__common:未初始化过的符号声明__bss:未初始化的全局变量LC_LOAD_DYLIBLC_LOAD_DYLIB是我们要介绍的第二个加载命令。...MH_DSYMrelease模式下,打模拟器包或真机包就会在app同级目录下生成一个.dSYM文件,如下:[dSYM]这个.dSYM格式的文件是iOS App的符号表,存储着二进制文件的符号信息。

10.6K10

启动优化

数据仍然存在时的启动 启动优化 -> T1 + T2 需要启动优化的部分 T1: pre-main阶段, 即main函数之前, 操作系统加载APP可执行文件到内存,执行一系列加载&链接等工作 -> dyld...方法执行完成为止, 主要是构建第一个界面,并完成渲染. main函数之前的部分 Edit Scheme -> Run -> Arguments -> Environment Variables -> 添加'DYLD_PRINT_STATISTICS...'设为1 image.png pre-main字段说明 dylib loading time(动态库耗时) rebase/binding time(偏移修正/符号绑定耗时) rebase(偏移修正):...而随机分配的ASLR是0x1f00,如果想访问test方法,其内存地址(即真实地址)变为 ASLR+偏移值 = 运行时确定的内存地址(即0x1f00+0x0001 = 0x1f01) binding(绑定...NSLog(目前指向一个随机的地址),然后在运行时(从磁盘加载到内存中,是一个镜像文件),会将真正的地址给符号(即在内存中将地址与符号进行绑定,是dyld做的,也称为动态库符号绑定),一句话概括:绑定就是给符号赋值的过程

1.8K74

iOS编译原理

: undefined:表示在当前文件暂时找不到符号_NSLog; external:表示这个符号是外部可以访问的,对应表示文件私有的符号是non-external; 八、链接(Linking) 主要功能...external ___CFConstantStringClassReference (from CoreFoundation) (undefined) external dyld_stub_binder...结果分析:_NSLog符号依然是undefined,不过此时多了一些信息,即from Foundation,表示这个符号来自于Foundation,会在运行时动态绑定; 4.链接阶段的主要任务 1.符号解析...Mach-O文件(如dylib、a、tbd),合成一个Mach-O格式的可执行文件; 通常项目都会包含多个文件,不同文件之间的变量和接口函数就会产生相互依赖关系; 程序运行前,需要使用链接器将多个文件里的符号和地址绑定起来...但是这些符号都会被记录下来,在运行时再通过dlopen和dlsym动态链接绑定; 动态链接:作用于运行时,这样的优势在于:诸多类似UIKit这样的共享库将不必包含在每一个App包里。

1.6K20

iOS强化 : 熟悉 Mach-O 文件

Mach-O = 文件配置 + 二进制文件 除了可执行文件之外,还有一些文件也是Mach-O格式,比如: 目标文件.o 库文件 .a .dylib Framework dyld(动态链接器) .dsym...(符号表) 由此我们知道,可执行文件只是Mach-O的一种,因此我们将Mach-O文件分为以下几种: 名称 注释 Mach-O Object 目标文件 Mach-O ececutable 可执行文件...下面我们列举一些常见的: 名字 注释 LC_SEGMENT_64 将文件中的段映射到进程地址空间中 LC_DYLD_INFO_ONLY 加载动态链接库信息(重定向地址、弱引用绑定、懒加载绑定、开放函数等的偏移值信息...) LC_SYMTAB 载入符号表地址 LC_DYSYMTAB 载入动态符号表地址 LC_LOAD_DYLINKER 加载动态链接器 LC_UUID 唯一标识,crash解析中也会用到,检查dysm文件和...TEXT代表的意思如下: 注释 __DATA段 __DATA段在内存中紧跟在__TEXT段之后 注释 OC 引用的父类列表 ⚠️ 这里有一点大家需要注意,系统库的方法在我们自己的Mach-O文件里面是找不到

1.1K40
领券