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

linux下的so、o、lo、a、la文件的区别

o: 编译的目标文件 a: 静态库,其实就是把若干o文件打了个包 so: 动态链接库(共享库) lo: 使用libtool编译出的目标文件,其实就是在o文件中添加了一些信息 la: 使用libtool编译出的库文件...当要生成的文件是诸如libmylib.la的时候,比如: $libtool –mode=link gcc -o libmylib.la -rpath /usr/lib –L/usr/lib –la 其依赖的库的搜索基本类似...考虑以下情况:要从myprog.o文件编译生成myprog,其依赖于库liba.so(使用libtool生成),liba.so又依赖于libb.so(libb.so的生成不使用libtool),而且由于某种原因...$ unicore32-Linux-gcc –o myprog /usr/lib/liba.so \ -Wl,–rpath-link -Wl,/home/UNITY_float/install/usr/...libtool中有一个变量“hardcode_libdir_flag_spec”,该变量本来是传递“-rpath”选项的,但我们可以修改它,添加我们需要的路径,传递给unicore32-linux-gcc

8.8K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Mach-O文件结构

    进程,其实就是可执行文件在内存中加载得到的结果; 可执行文件必须是操作系统可理解的格式,而且不同系统的可执行文件的格式也是不同的; 2.不同平台的可执行文件 Linux:ELF文件 Windows...Mach-O文件 Mach-O文件是iOS,iPadOS、macOS平台的可执行文件格式。..., 可执行文件目标文件或者静态库和动态库 uint32_t ncmds; // LoadCommands加载命令的条数(加载命令紧跟header之后) uint32...、链接有关 uint32_t reserved; // 保留字段(相比于32位多出的字段) }; 由于可执行文件目标文件或者静态库和动态库等都是Mach-O格式,所以才需要...常用的文件类型有以下几种: #define MH_OBJECT 0x1 /* 目标文件*/ #define MH_EXECUTE 0x2 /* 可执行文件*/ #define MH_DYLIB

    1.4K20

    Linux O(n)调度器

    前面我们学习了调度器的设计需要关注的几个点,在这里复习下: 吞吐量(对应的是CPU消耗型进程) 响应速度(对应的是IO消耗型进程) 公平性,确保每个进程都可以有机会运行到 移动设备的功耗 Linux中调度器的设计...实时进程采用两种调度策略SCHED_RR或者SCHED_FIFO 普通进程采用nice值进行动态调整普通进程的优先级 经常睡眠的进程尝试增大下优先级,经常长占CPU的适当减少优先级 本节我们先来学习Linux...早期的调度算法的设计,先从最早的调度器算法开始,此调度器时间复杂度是O(n),所以也可以称为O(n)调度算法。...我们选择的内核版本是linux-2.4.19。 O(n)调度器的实现原理 O(n)代表的是寻找一个合适的进程的时间复杂度。...总之O(n)调度器有很多问题,不过有问题肯定要解决的。所以在Linux2.6引入了O(1)的调度器。

    3.3K20

    Linux O(1)调度器

    O(n)调度器的种种问题,linux内核社区则在2.6内核版本引入了O(1)调度器,当然了引入的目的也正是要解决O(n)调度器面临的问题。...我们这片文章以Linux2.6.2版本来学习,在Linux内核文档中有一篇关于O(1)调度器的目的,如何设计的,以及实现有一个详细的介绍:sched-design.txt文档,有兴趣的可以去阅读。...从以上几点来看,可以看出O(1)的算法的改进都是针对O(n)算法存在的问题来修改的。...总结: O(1)调度器的引入主要是为了解决O(n)调度器的不足 O(1)调度器在赏罚机制上比O(n)调度器考虑的因素比较多,不再时像O(1)那样直接考时间片的大小来调度 但是O(n)和O(1)调度算法上核心还是通过判断一个进程的行为...如果去看O(1)调度器的实现,没有O(n)算法那么简单明了,O(1)中加了需要时间的判断,各种情况的考虑,导致代码的阅读性很差,读起来很费劲。

    2.9K21

    谈谈调度 - Linux O(1)

    约莫十五年前,当我刚刚开始参加工作时,赶上 Linux 发布划时代的 2.6 内核。在这个大家都翘首期盼的内核版本中,最令人兴奋的便是 O(1) scheduler。本文来谈谈这个算法是如何实现的。...2.4 scheduler 的问题 Linux 2.4 scheduler 支持 SMP(Symmetric Multi-Processing),然而,由于只用一个 global runqueue,各个...linked list,stack,queue 在平均和最坏情况下都是 O(1),而大家脑海里的 hash table,同样的,虽然平均是 O(1),但最坏情况是 O(N)。...所以我们看到,如果想要达成 O(1) scheduler 的目标,操作只能包含纯粹的 access,insert 和 deletion。一定不能有 search。...在其刚问世时,很多 linux 发行版就迫不及待将其移植回 2.4 kernel。而程序君整个职业生涯中接触过的一些调度器中,都能见到 bitarray + priority queue 的身影。

    1.8K80

    Linux下将源文件编译成目标文件的过程解析

    简介 请讲一下linux如何源文件逐步编译成可执行文件。 解答 首先先上图对编译的整个过程有个感性的认识,然后再逐步分析各个过程。...以hello.c 程序为例 # include main{ printf("hello\n"); } 一个.c源程序需要经过预处理器生成.i文件,再经过编译器生成.s文件,再经过汇编器生成可重定位目标文件....o文件,再与其他.o文件经过链接器生成最终的可执行目标程序。...主要是处理源文件中以“#”开头的预编译指令。...将多个可重定位的目标文件.o合并以生成可执行文件,其可以被加载到内存中,由系统执行。 总结 以上就是本文关于Linux下将源文件编译成目标文件的过程解析的全部内容,希望对大家有所帮助。

    1.8K21

    iOS逆向之Mach-O文件

    o目标文件:源文件编译而成的目标文件.a静态库文件:由多个.o文件编译链接合并而成的文件我们可以借助clang命令将C语言的.c文件和OC的.m文件编译成.o目标文件:clang -c C文件.c -o...目标文件.o // 将C语言.c源码文件编译成.o目标文件clang -c OC文件.m -o 目标文件.o // 将OC语言.m源码文件编译成.o目标文件-c 是compile的意思。...即-c可以生成目标文件-o 是output的意思。...代表指定输出的文件的目录和名称,省略-o参数目标文件默认和源文件同名如果不使用clang,也可以使用GCC,参数意义和Clang相同,如下:gcc -c C文件.c -o 目标文件.ogcc -c OC...文件.c -o 目标文件.o然后借助file命令验证.o文件是Mach-O文件格式:file 目标文件名.o // 利用file命令查看文件类型 main.o: Mach-O 64-bit object

    10.7K10

    认识目标文件的符号

    每一个目标文件都会有一个相应的符号表(Symbol Table),表里记录了目标文件用到的所有符号。 1....比如汇编源代码包含了一个函数foo,那么汇编器编译成目标文件以后,foo在目标文件中对应的符号名也是foo。...多个目标文件中含有相同名字全局符号的定义,那么这些目标文件链接的时候将会出现符号重复定义的错误。...比如目标文件 A 和 B 都定义了一个初始化后的全局整型变量 global,那么链接器将 A 和 B 进行链接时会报错: b.o:(.data+0x0): multiple definition of...规则2:如果一个符号在某个目标文件中是强符号,在其他文件中都是弱符号,那么选择强符号。 规则3:如果一个符号在所有目标文件中都是弱符号,那么选择其中占用空间最大的一个。

    1.5K40

    Linux进程调度之 - O(1)调度算法

    Linux是一个支持多任务的操作系统,而多个任务之间的切换是通过 调度器 来完成,调度器 使用不同的调度算法会有不同的效果。...Linux2.4版本使用的调度算法的时间复杂度为O(n),其主要原理是通过轮询所有可运行任务列表,然后挑选一个最合适的任务运行,所以其时间复杂度与可运行任务队列的长度成正比。...而Linux2.6开始替换成名为 O(1)调度算法,顾名思义,其时间复杂度为O(1)。...虽然在后面的版本开始使用 CFS调度算法(完全公平调度算法),但了解 O(1)调度算法 对学习Linux调度器还是有很大帮助的,所以本文主要介绍 O(1)调度算法 的原理与实现。...由于在 Linux 内核中,任务和进程是相同的概念,所以在本文混用了任务和进程这两个名词。

    4.8K81

    目标文件函数隐藏初探

    目标文件函数隐藏初探 场景如下,需要以.o形式(静态库形式),发布一个库,给其他代码集成。生成库mylib.o之后,使用nm查看,可以查看到很多函数符号。...但这么修改之后,库本身的其他源文件,也无法使用该函数了,因为c语言中的static是将函数的作用域限定在了函数所在的源文件。...printf("inner 2\n"); } void api_1() { printf("api 1\n"); } void api_2() { printf("api 2\n"); }; 编译生产目标文件...使用strip的效果 不修改源文件,直接使用strip修改mylib.o cp mylib.o mylib_origin.o strip -N inner_fun1 -N inner_fun2 mylib.o...但即使strip删除了符号表,也还是可以从二进制文件中分析到内外部函数名称的。所以如果想隐藏内部函数名称,以避免暴露内部逻辑,那就还需要使用一些其他的手段。

    1.2K10

    LinuxLinux文件

    Linux文件操作 Linux中,一切皆文件(网络设备除外)。 硬件设备也“是”文件,通过文件来使用设备。 目录(文件夹)也是一种文件。...boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件和镜像文件。...deb:deb是Device(设备)的缩写,该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。...tmp:用来存放一些临时文件 media:Linux系统会自动识别一些设备,例如U盘、光驱等,当识别后,Linux会把识别的设备挂载到这个目录下。...使用底层文件操作(系统调用) 例如:read 使用I/O库函数 例如: fread ---- Linux底层文件操作 (关于文件的系统调用) ---- write 往一个文件描述符中写数据

    39.7K31

    linux 移动 文件,linux移动文件命令

    linux移动文件命令 mv命令 功能:为文件或目录改名或将文件由一个目录移入另一个目录中。该命令如同DOS下的ren和move的组合。...语法:mv [选项] 源文件或目录 目标文件或目录 说明: 视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。...当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。...在mv操作要覆盖某已有的目标文件时不给任何指示,指定此选项后,i选项将不再起作用。 如果所给目标文件(不是目录)已存在,此时该文件的内容将被新文件覆盖。...例2:将文件wch.txt重命名为wjz.doc$ mv wch.txt wjz.doc 相关视频教程推荐:《Linux教程》 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

    21.4K40

    mach-o文件分析多余的类和方法

    x^2 + y^2 = r^2# mach-o文件分析多余的类和方法.md 背景 最近做包大小优化,在做项目代码优化时,其中有一个过程是分析Mach-O文件,看网上很多文章都说通过otool分析Mach-O...原理 首先来看Mach-O是什么,Mach-O是Mach Object文件格式的缩写,是一种记录可执行文件、对象代码、共享库、动态加载代码和内存转储的文件格式。...Mach-O文件主要由3部分组成: Mach Header: 描述 Mach-O 的CPU架构、文件类型、加载命令等信息 Load Command: 描述文件中数据等具体组织结构,不同数据类型使用不同等加载命令表示...:Xcode打包好的iPA,改后缀名为.zip,然后解压缩得到payload文件夹,其中有xxx.app,右键显示包内容,其中有xxx的exec文件,即是Mach-O文件。...Mach-O 文件格式探索 二进制文件分析之常用命令 iOS代码瘦身实践:删除无用的类

    3.7K11

    LinuxLinux文件IO

    文件I/O 直接使用系统调用的缺点: 影响系统性能 系统调用比普通函数调用开销大,因为系统调用要进行用户空间和内核空间的切换。 系统调用一次所能读写的数据量大小,受硬件的限制。...标准文件访问方式 ---- 直接IO方式 OPEN +O_DIRECT = 绕过内核缓冲区的直接访问,有效避免了CPU和内存的多余时间开销。要求内存边界对齐。.../io_test.txt"; int fd = 0; int i = 0; fd = open(filename,O_RDWR | O_TRUNC | O_CREAT | O_DIRECT);...---- O_SYNC 缓存同步 为了保证磁盘系统与缓冲区内容一致,Linux系统提供了sync,fsync,fdatasync三个函数。...---- Linux文件IO流程图 内核中会有一个线程,不断地将高速页缓冲区中的数据写入到物理磁盘中。

    28.6K30
    领券