macos - printf 在哪里定义?
问题描述
我已经编译了一个简单的 c 程序,它使用printf
并otool -l
在二进制文件上运行。在命令/usr/lib/libSystem.B.dylib
中提到了它。LC_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
.
回到otool -l
libSystem.B.dylib 的输出,您会看到这些依赖项是通过LC_REEXPORT_DYLIB
load 命令实现的。这就是在没有实际符号表条目的情况下导出其他库中的符号的方式。
我想,可以说,这是一个错误,nm
因为它不显示重新导出的符号。
推荐阅读
- python - AttributeError:模块 'skopt' 没有属性 'plots' 错误消息
- javascript - Discord.js Collection() 比 Objects 或 Maps 更好吗?
- php - 在不同的mysql表中搜索不同的列
- ruby-on-rails - 未找到 JsonApi 序列化程序
- autocomplete - oh-my zsh 的 incr 插件在自动补全时无法正确处理空格
- node.js - 如何在 sendgrid 电子邮件正文中发送链接?
- slack - Slack - 过滤掉应用程序所属的对话
- java - WildFly JMS 问题:“消费者已关闭”
- java - Java中的引用透明函数
- laravel - 如何在 Laravel 7.3.5 中使用 compact() 和 ->with() 显示保存成功消息?