dylib文件的含义是什么?

2024-01-09

我的 C++ 编译器创建包含动态库的“dylib”文件。 .dylib 和 .so 文件有什么区别?

Mach-O 格式的文件和 ELF 格式的文件有什么区别?我必须构建文件以供以后在 iOS(仅限静态库/Mach-O)和 Android(ELF)下使用。

Thanx!


我找到:

Mach-O 的一项让许多人感到惊讶的功能是严格的 共享库和动态可加载模块之间的区别。 在 ELF 系统上两者是相同的;可以使用任何共享代码 作为库并用于动态加载。使用otool -hv some_file查看 some_file 的文件类型。

Mach-O 共享库的文件类型为 MH_DYLIB,并带有 扩展名.dylib。它们可以与通常的静态链接 链接器标志,例如-lfoo 用于 libfoo.dylib。然而,他们不能 作为模块加载。 (旁注:可以加载共享库 通过 API 动态地进行。然而,该 API 与 捆绑包的 API 和语义使其对于 dlopen() 毫无用处 仿真。最值得注意的是,共享库无法卸载。)[这 不再正确 - 您可以将 dlopen() 与 dylib 和包一起使用。 但是,dylib 仍然无法卸载。]

可加载模块在 Mach-O 中被称为“包”。他们有 文件类型 MH_BUNDLE。由于没有涉及的组件关心它,所以它们 可以携带任何扩展。扩展名 .bundle 被推荐 Apple,但大多数移植软件都使用 .so 兼容性。捆绑包可以通过 dyld 动态加载和卸载 API,并且有一个在其之上模拟 dlopen() 的包装器 API。 [dlopen 现在是首选 API。] 无法链接 反对捆绑包,就好像它们是共享库一样。然而,它是 捆绑包可能链接到真正的共享库;那些 加载包时将自动加载。

要在 OS X 上编译普通共享库,您应该使用 -dynamiclib 和扩展名 .dylib。 -fPIC 是默认值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

dylib文件的含义是什么? 的相关文章

  • ELF:链接:为什么我在 .so 文件中得到未定义的引用

    我正在尝试针对 wxWidgets 构建一个程序 但出现链接器错误 我想真正理解这意味着什么 错误是 usr lib libwx baseu 2 8 so undefined reference to std ctype
  • 汇编器什么时候使用像 R_X86_64_32S 这样的符号扩展重定位而不是像 R_X86_64_32 这样的零扩展更好?

    举个具体的例子 在 GAS 2 24 上 移动地址 mov s eax s After as 64 o a o a S objdump Sr a o 使用零扩展 0000000000000000
  • Linux 用户空间 ELF 加载器

    我需要做一件相当不寻常的事情 手动执行 elf 可执行文件 IE 将所有部分加载到正确的位置 查询 main 并调用它 然后进行清理 可执行文件将被静态链接 因此不需要链接库 我还控制基地址 所以不用担心可能的冲突 那么 有没有相关的库呢
  • Arm:objcopy 如何知道 elf 中的哪些部分要包含在二进制或 ihex 中?

    我正在开发一个项目 其中涉及解析arm elf 文件并从中提取部分 显然 elf 文件中有很多部分没有加载到闪存中 但我想知道 objcopy 到底如何知道要在二进制文件中包含哪些部分以直接闪存到闪存中 以arm elf文件的以下reade
  • readelf -S 输出中的 ES、Lk、Inf 和 A​​l 列标题的含义是什么?

    在输出中readelf S 我想知道列标题是什么ES Lk Inf and Al mean 例如 Section Headers Nr Name Type Addr Off Size ES Flg Lk Inf Al 0 NULL 0000
  • linux下如何将PE(Portable Executable)格式转换为ELF

    将 PE 二进制文件转换为 ELF 二进制文件的最佳工具是什么 以下是这个问题的简要动机 假设我有一个简单的 C 程序 我使用 Linux 的 gcc 编译它 这给出了 ELF 并使用 Windows 的 i586 mingw32msvc
  • 裸机 RISC-V CPU - 处理器如何知道从哪个地址开始获取指令?

    我正在设计自己的 RISC V CPU 并且已经能够实现一些指令代码 我已经安装了 RV32I 版本的 GCC 编译器 所以我现在有了汇编器riscv32 unknown elf as可用的 我正在尝试仅用一条指令来汇编一个程序 simpl
  • ELF 中的字符串表

    我得到一些符号 并得到一个 ELF 文件 的十六进制转储 我怎样才能知道这个符号出现在哪个部分 有什么区别 strtab and shstrtab 是否还有另一个符号字符串数组 当我获得符号名称表的索引时 它是 strtab or in s
  • 从 ELF 目标文件转储 C 结构大小

    如何使用调试符号从 ELF 目标文件中提取所有 C 结构的大小 可以使用 print sizeof some struct 从 GDB 获取各个结构大小 但我需要的是获取所有结构的列表 我查看了 nm 和 objdump 但没有看到执行我正
  • -fPIC 仅适用于共享库吗?

    I know fPIC对于共享库是必要的并且知道为什么 不过 我对这个问题并不清楚 Should fPIC在构建可执行文件或静态库期间永远不会使用 Should fPIC在构建可执行文件或静态库期间永远不会使用 从不是一个很强烈的词 上面的
  • 获取精灵部分偏移量

    我正在尝试获取 elf 文件每个部分的偏移量和数据 我已经有了包含以下代码的部分名称 include
  • Mac系统上检测框架使用情况?

    我想在 OSX 上开发示例框架 并要求在任何时候该框架只能由单个客户端使用 我不知道如何实现这一点 他们有 API 来检测框架正在使用的天气吗 我们可以为此使用一些与文件相关的 API 吗 我看过一个 Windows 示例 其中使用以下命令
  • 编译 Lua - 创建 .so 文件?

    我正在 Centos 6 5 上编译 Lua 5 2 3 编译 安装工作正常 但是 我还需要编译另一个程序的开发库 我通常会通过这样做来安装它们 yum install lua devel 问题是安装 Lua 5 1 共享库 而不是 5 2
  • Linux Mach-O 反汇编器

    是否有任何 Linux 程序可以像 objdump 一样反汇编 OSX 通用 x86 x86 64 fat Mach O 二进制文件 GNU binutils 的 objdump 支持 ELF 和 Windows PE 文件 但不支持 Ma
  • arm gcc工具链为arm-elf或arm-none-eabi,有什么区别?

    当您构建 gcc 工具链时 可以将其构建为arm elf 或arm none eabi 但是有什么区别呢 我今天使用 eabi 但这只是因为其他人似乎都这样做 但由于这是一个非常糟糕的论点 因此理解其中的差异真的很高兴 注意 此工具链将为基
  • 读取 ELF 部分的内容(以编程方式)

    我正在尝试检索 ELF 二进制文件中附加部分的内容 此时 我使用以下代码来检索每个部分的名称 include
  • objdump 输出中的“Algn”2**2 和 2**0 意味着什么?

    下面的文件中这是什么意思 2 2 and 2 0 objdump h main o main o file format elf32 i386 Sections Idx Name Size VMA LMA File off Algn 0 t
  • Clang 使用 -nostdlib 生成崩溃代码

    我正在尝试为可执行文件设置自己的运行时环境 但无法使用 clang v3 4 1ubuntu1 目标 x86 64 pc linux gnu 来生成没有段错误的可执行文件 我已将问题简化为以下内容 如果我有一个文件 crt1 c 除了满足
  • 在 xCode 6 中发现意外的 Mach-O 标头代码:1918975009

    导致错误的原因是什么 Found an unexpected Mach O header code 1918975009 in xCode 6 我将我的项目存档并作为ad hoc构建并且它构建 链接 存档很好但是当我在xCode组织者和选择
  • 使用 libdl 的 C 插件架构

    我一直在尝试用 C 语言编写一个小型 IRC 框架 现在我将扩展它的一些核心功能 但除此之外 我希望它可以通过插件进行扩展 到目前为止 每当我写一些与 IRC 相关的东西 我写了很多东西 现在大约有 6 种不同的语言 我很着火 并且实际上继

随机推荐