32位?64位?Mach-O?

本文对比了AIX和OSX系统下df命令的实现方式。在AIX中,该命令依赖于特定的库文件如libc.a和libcrypt.a,并且shr.o存在32位和64位的区别。而在OSX环境下,df命令通过链接多个系统库来运行,包括libutil.dylib、libgcc_s.1.dylib等,并且不需要链接内核。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AIX:

$ uname -a

AIX enron 3 5 002F129D4C00

$ which df

/usr/bin/df

$ file /usr/bin/df

/usr/bin/df: executable (RISC System/6000) or object module

$ ldd /usr/bin/df

/usr/bin/df needs:

/usr/lib/libc.a(shr.o)

/unix

/usr/lib/libcrypt.a(shr.o)

$ oslevel -r

5300-05

OS/X:

Last login: Mon Feb 15 19:46:12 on ttys000

jaminwmdemacbook:~ jianmingxu$ uname -a

Darwin jaminwmdemacbook.local 9.8.0 Darwin Kernel Version 9.8.0: Wed Jul 15 16:55:01 PDT 2009; root:xnu-1228.15.4~1/RELEASE_I386 i386

jaminwmdemacbook:~ jianmingxu$ which df

/bin/df

jaminwmdemacbook:~ jianmingxu$ file /bin/df

/bin/df: Mach-O universal binary with 2 architectures

/bin/df (for architecture i386): Mach-O executable i386

/bin/df (for architecture ppc7400): Mach-O executable ppc

jaminwmdemacbook:~ jianmingxu$ otool -L /bin/df

/bin/df:

/usr/lib/libutil.dylib (compatibility version 1.0.0, current version 1.0.0)

/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)

/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.3)

请注意!OS/X下面的可执行程序都不需要链接kernel

我们来看看这个神奇的/usr/lib/libSystem.B.dylib

jaminwmdemacbook:~ jianmingxu$ file /usr/lib/libSystem.B.dylib

/usr/lib/libSystem.B.dylib: Mach-O universal binary with 4 architectures

/usr/lib/libSystem.B.dylib (for architecture ppc7400): Mach-O dynamically linked shared library ppc

/usr/lib/libSystem.B.dylib (for architecture ppc64): Mach-O 64-bit dynamically linked shared library ppc64

/usr/lib/libSystem.B.dylib (for architecture i386): Mach-O dynamically linked shared library i386

/usr/lib/libSystem.B.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64

大概这就是Mach-O可执行格式跨硬件体系的奥妙之所在?

另外我们看到这个系统库是同时兼容3264位的

AIX用户应该都知道那个可恶的shr.o是有32位和64位之分的,不光是shr.oAIX上面好多库都有64/32不同版本,一不小心链错了那可是要core dump

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值