printf 在哪里定义的?
Where is printf defined?
我编译了一个简单的 c 程序,它在二进制文件上使用 printf
和 运行 otool -l
。其中 /usr/lib/libSystem.B.dylib
在 LC_LOAD_DYLIB
命令中被提及。但是当我 nm -a /usr/lib/libSystem.B.dylib
列出该库中的符号时,我找不到 printf
。那它是在哪里定义的呢?
首先,otool -L
是查看 executable 链接到的库列表的更简单方法。
其次,如果您将 otool -L
应用于 libSystem.B.dylib,您会发现它又依赖于 /usr/lib/system 中的一堆库。其中之一是 libsystem_c.dylib,它是 C 库。定义 printf
.
返回到 libSystem.B.dylib 的 otool -l
输出,您会看到这些依赖项是通过 LC_REEXPORT_DYLIB
加载命令实现的。这就是其他库中的符号在没有实际符号 table 条目的情况下导出的方式。
我想,可以说,这是 nm
中的一个错误,它不显示重新导出的符号。
我编译了一个简单的 c 程序,它在二进制文件上使用 printf
和 运行 otool -l
。其中 /usr/lib/libSystem.B.dylib
在 LC_LOAD_DYLIB
命令中被提及。但是当我 nm -a /usr/lib/libSystem.B.dylib
列出该库中的符号时,我找不到 printf
。那它是在哪里定义的呢?
首先,otool -L
是查看 executable 链接到的库列表的更简单方法。
其次,如果您将 otool -L
应用于 libSystem.B.dylib,您会发现它又依赖于 /usr/lib/system 中的一堆库。其中之一是 libsystem_c.dylib,它是 C 库。定义 printf
.
返回到 libSystem.B.dylib 的 otool -l
输出,您会看到这些依赖项是通过 LC_REEXPORT_DYLIB
加载命令实现的。这就是其他库中的符号在没有实际符号 table 条目的情况下导出的方式。
我想,可以说,这是 nm
中的一个错误,它不显示重新导出的符号。