1 【.so文件】是什么? 

【.so文件】是linux系统中的共享库文件,类似于windows系统上的【dll文件】;

【.so文件】文件的格式是【ELF格式的文件】,等有了印象再研究原理;

一般来说,在Mac系统上,我们经常见到的动态库文件的扩展名是【.dylib】,但经过测试,在Mac系统上生成的【.so】文件也是可以使用的;

2 【ELF文件格式】是什么?

  • ELF(Executable and Linking Format)是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东西、以及都以什么样的格式去放这些东西。它自最早在 System V 系统上出现后,被 xNIX 世界所广泛接受,作为缺省的二进制文件格式来使用。可以说,ELF是构成众多xNIX系统的基础之一;
  • 在计算机科学中,是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储的标准文件格式。
  • 是UNIX系统实验室(USL)作为应用程序二进制接口(Application Binary Interface,ABI)而开发和发布的,也是Linux的主要可执行文件格式。
  • 1999年,被86open项目选为x86架构上的类Unix操作系统的二进制文件标准格式,用来取代COFF。因其可扩展性与灵活性,也可应用在其它处理器、计算机系统架构的操作系统上。

3 【Mach-O文件格式】是什么?

  • This document describes the structure of the Mach-O (Mach object) file format, which is the standard used to store programs and libraries on disk in the Mac app binary interface (ABI).具体参考:【https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/MachORuntime/index.html】
  • “Mach-O为Mach Object文件格式的缩写,它是一种用于可执行文件,目标代码,动态库,内核转储的文件格式。作为a.out格式的替代,Mach-O提供了更强的扩展性,并提升了符号表中信息的访问速度。Mach-O曾经为大部分基于Mach核心的操作系统所使用。NeXTSTEP,Darwin和Mac OS X等系统使用这种格式作为其原生可执行文件,库和目标代码的格式。
  • 在linux环境下,/usr/include目录下有elf.h文件,会有针对elf文件格式的结构体定义,在mac下,则有一个对应的mac-o目录,里面也有类似的文件。
  • mac下要查看可执行文件或者动态库的一些信息,就只能通过【otool】这样的工具来进行,不如【readelf】这样的熟悉和方便,另外mac也不用so这样的名称,而使用dylib,mac系统终究是来源于bsd。