printf 在哪里定义?



我编译了一个简单的c程序,它使用printf并在二进制上运行otool -l。其中/usr/lib/libSystem.B.dylibLC_LOAD_DYLIB命令中提到。但是当我nm -a /usr/lib/libSystem.B.dylib列出该库中的符号时,我找不到printf.那么它在哪里定义呢?

首先,otool -L是查看可执行文件链接到的库列表的更简单方法。

其次,如果你将otool -L应用于libSystem.B.dylib,你会看到它反过来依赖于/usr/lib/system中的一堆库。其中之一是libsystem_c.dylib,它是C库。这定义了printf.

回到libSystem.B.dylibotool -l输出,你会看到这些依赖项是通过LC_REEXPORT_DYLIB加载命令实现的。这就是导出其他库中的符号的方式,而无需为其提供实际的符号表条目。

我想,可以说,这是一个错误,nm它不显示重新导出的符号。

最新更新