Mach-O共享库(`.dlib)支持符号版本控制吗



我遇到了一些segfault,这些segfault似乎可以在linux平台上通过ELF动态库中的符号版本控制来解决。但我仍然在macOS上遇到segfault。Mach-O共享库中是否有类似的功能?如果是,我如何在文件中查看版本信息?

例如,我知道在linux上我可以执行readelf -s libsomething.so,它会输出版本信息和符号。但是readelf阻塞了.dylib文件。

不是真的,但你可以自己滚动。

举个例子,苹果实际上已经对stat()系列函数进行了某种符号版本控制。根据宏定义,stat的声明将扩展为以下任一项:

int stat(const char *, struct stat *) __asm("_stat");

或者这个:

int stat(const char *, struct stat *) __asm("_stat$INODE64");

这就是库导出的样子:

% nm -arch x86_64 /usr/lib//system/libsystem_kernel.dylib | fgrep ' _stat'
0000000000009650 T _stat
0000000000001fd8 T _stat$INODE64
0000000000001fd8 T _stat64
00000000000250dc T _statfs
0000000000002e4c T _statfs$INODE64
0000000000002e4c T _statfs64

(请注意,必须在那里使用x86_64版本,因为arm64版本从一开始就没有旧的实现,因此_stat已经有了新版本。(

但是,如果您只是一个库的用户,那么除非您使用不匹配的结构和函数定义破坏了标头,否则这不会解决segfault问题。

最新更新