Я использую компилятор gcc и ОС Ubuntu 12.04. Я хочу знать, где я могу найти объектный файл и в каком каталоге он содержит определение функции printf. Опять же, я ищу не заголовочный файл, содержащий прототип, а объектный файл, содержащий фактическое определение.
Где я могу найти объектный файл, содержащий определение функции printf?
Ответы (2)
Вы ищете объектный файл или исходный файл?
Объектный файл .o хранится в библиотеке libc.so
. В большинстве дистрибутивов Linux этот файл находится по адресу /lib/libc.so
. В Ubuntu 11 и 12 в рамках поддержки нескольких архитектур содержимое /lib было перемещено до /lib/i386-linux-gnu
и /lib/x86_64-linux-gnu
.
Вы можете получить отдельный объектный файл с помощью команды ar
(архив), которая использовалась для создания библиотеки с параметром x
(извлечение):
ar x libc.a stdio.o
Однако это не кажется очень полезным, поэтому я предполагаю, что вам действительно нужен исходный файл, а не объектный файл. Для этого вы должны установить пакет glibc, который содержит printf.c (который вызывает vprintf, который вызывает vfprintf, который содержит фактический код для printf).
Этот источник можно просматривать на Launchpad. а>. Это довольно сложно и занимает более 2000 строк кода.
objdump + some options | grep printf
(3) См. документацию GCC и попробуйте.
- person Kevin Vermeer; 26.07.2012
Я нашел точный ответ на первые два моих вопроса -
Чтобы вывести список всех объектных файлов, присутствующих в libc, мы используем следующие команды:
Система x86_64: $ ar -t /usr/lib/x86_64-linux-gnu/libc.a
Система i386: $ ar -t /usr/lib/i386-linux-gnu/libc.a
Чтобы узнать, какой объектный файл содержит функцию printf, запустите эту команду в /usr/lib/x86_64-linux-gnu /usr/lib/i386-linux-gnu или в каталоге:
$ nm -o libc.a | grep -w printf
Продолжаем искать правильный ответ.
nm
— хорошая альтернатива objdump
, когда вы имеете дело с библиотеками.
- person Kevin Vermeer; 26.07.2012
libc
. Что именно вы ищете? Например, вы ищете определение в исходном коде или в библиотеке, которая его содержит на вашем компьютере? - person another.anon.coward   schedule 25.07.2012