Где определяется printf? - PullRequest
       22

Где определяется printf?

0 голосов
/ 09 февраля 2020

Я скомпилировал простую c программу, которая использует printf и запустил otool -l в двоичном файле. В нем /usr/lib/libSystem.B.dylib упоминается в команде LC_LOAD_DYLIB. Но когда я делаю nm -a /usr/lib/libSystem.B.dylib для перечисления символов в этой библиотеке, я не нахожу printf. Где это определяется тогда?

1 Ответ

1 голос
/ 09 февраля 2020

Во-первых, otool -L - это более простой способ просмотреть список библиотек, на которые ссылается исполняемый файл.

Во-вторых, если вы примените otool -L к libSystem.B.dylib, вы увидите, что это, в свою очередь, зависит от нескольких библиотек в / usr / lib / system. Одним из них является libsystem_ c .dylib, который является библиотекой C. Это определяет printf.

Возвращаясь к выводу otool -l для libSystem.B.dylib, вы увидите, что эти зависимости задаются командой загрузки LC_REEXPORT_DYLIB. Вот как символы в других библиотеках экспортируются без фактических записей в таблице символов для них.

Я полагаю, возможно, это ошибка в nm, что она не показывает реэкспортированные символы.

...