dylib文件的含义是什么?

时间:2011-11-16 21:13:28

标签: elf mach-o dynamic-library

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

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

感谢名单!

1 个答案:

答案 0 :(得分:5)

我发现:

  

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

     

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

     

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

     

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