我的 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(使用前将#替换为@)