OSX 上的 32 位 DTrace
Posted
技术标签:
【中文标题】OSX 上的 32 位 DTrace【英文标题】:32 bit DTrace on OSX 【发布时间】:2013-02-21 17:35:28 【问题描述】:我需要在 OSX 上的 32 位可执行文件上运行 DTrace。我有两台机器,都运行 OSX 10.8.2。其中一个,/usr/lib/dtrace/libdtrace_dyld.dylib
是一个胖二进制文件,另一个不是:
/usr/lib/dtrace/libdtrace_dyld.dylib: Mach-O universal binary with 2 architectures
/usr/lib/dtrace/libdtrace_dyld.dylib (for architecture i386): Mach-O dynamically linked shared library i386
/usr/lib/dtrace/libdtrace_dyld.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64
对
/usr/lib/dtrace/libdtrace_dyld.dylib: Mach-O 64-bit dynamically linked shared library x86_64
这两个是哪里来的?我如何“正式”获得胖子,即不只是从另一台机器上复制它?
当我尝试在 32 位可执行文件上运行 dtrace 时,会发生这种情况,只使用 64 位 dylib,顺便说一句:
dyld: could not load inserted library: /usr/lib/dtrace/libdtrace_dyld.dylib
【问题讨论】:
【参考方案1】:Mac OS X ML 上的 DTrace 库是胖二进制文件(i386、x86_64)。您的第二台机器缺少 32 位,因为有人删除了它。可能该系统“优化器”之一已在系统上运行。
我机器上的 lib 的 SHA (shasum /usr/lib/dtrace/libdtrace_dyld.dylib
) 是 0722f971d9999245cda234ba5fd3119820fa348a
。我已经在其他几台机器上测试过它并且它匹配。它还与全新安装 Mac OS X ML 的机器相匹配。这意味着复制它就可以了。
恢复它的唯一其他方法是从备份中恢复它或重新安装系统。
【讨论】:
什么样的优化器可以做到这一点?这是一台非常新的机器,我从来没有故意运行过这样的东西。 哦,您知道删除“未使用”的本地化以优化磁盘空间。我会尝试找到“干净”的系统并更新答案。 我绝对确定我从未(故意)运行过这样的程序,而这台机器已经使用了一周。 @MarkProbst 你检查过系统上的其他二进制文件吗? 是的,这里也一样。我附带 10.8.2 (12C3103) 的机器只有 64 位libtrace_dyld.dylib
;我升级的另一台机器有 32 位和 64 位版本 (12C60)。听起来像一个错误。以上是关于OSX 上的 32 位 DTrace的主要内容,如果未能解决你的问题,请参考以下文章
当我创建一个 virtualenv 时,即使在 OSX 中已经设置为 32 位,python 也会以 64 位运行
使用带有 python 绑定的 boost 在 osx 上构建 32 位版本的 libtorrent
如何配置 Vista Ultimate(64 位)帐户,以便它可以访问 OSX 上的 SMB 共享? [关闭]
在 4GB iMac OSX 10.6.3 Snow Leopard(32 位)上无法通过 Java 中的 2542 个线程