Библиотеки для стандартных вещей (например, cout и т. Д.) * NEWBIE QUESTIONS * :) - PullRequest
3 голосов
/ 08 июля 2010

Мне было интересно узнать о стандартных библиотеках C, которые содержат все функции / определения, такие как abs (), потоки cout, printf и т. Д.

Я знаком с заголовочными файлами (stdio.h, cmath.h, time.h и т. Д.), Но, похоже, нигде нет соответствующих .lib или .dll (т.е. time.dll и т. д.).

Где актуальный код для функций в этих заголовочных файлах? Я что-то неправильно понимаю? Есть ли один огромный lib-файл, содержащий все стандартизированные материалы, или один для каждого заголовка?

Любая помощь приветствуется !!

Спасибо!

Ответы [ 5 ]

4 голосов
/ 08 июля 2010

Это зависит от реализации.В Windows стандартные функции библиотеки находятся в библиотеках времени выполнения C и C ++ .Библиотека времени выполнения C всегда связана автоматически;библиотека времени выполнения C ++ подключается автоматически, если вы включаете один из стандартных заголовков библиотеки.

3 голосов
/ 08 июля 2010

Если вы используете Linux / какой-либо вариант UNIX / AIX, попробуйте использовать ldd.Просто для удовольствия попробовать что-то новое, наберите ldd `which ls` в вашем приглашении Linux.Вот что я получил:

librt.so.1 => /lib/tls/librt.so.1 (0x0084c000)
libacl.so.1 => /lib/libacl.so.1 (0x40022000)
libselinux.so.1 => /lib/libselinux.so.1 (0x00289000)
libc.so.6 => /lib/tls/libc.so.6 (0x00a0b000)
libpthread.so.0 => /lib/tls/libpthread.so.0 (0x00c57000)
/lib/ld-linux.so.2 (0x009ec000)
libattr.so.1 => /lib/libattr.so.1 (0x40028000)

Пути должны указывать вам, откуда выбираются общие библиотеки.Если вы пользуетесь Windows, заполучите зависящий от вас файл http://www.dependencywalker.com - отличный инструмент

2 голосов
/ 08 июля 2010

Обычно вам не нужно явно связывать библиотеки времени выполнения C или C ++. Обычно компилятор вызывает компоновщик с правильными параметрами, чтобы сделать это за вас.

На самом деле, с gcc вы должны что-то сделать, чтобы не включал библиотеки по умолчанию (например, используя -nodefaultlibs, -nostdlib или -nostartfiles).

Фактическое расположение стандартной библиотеки, включая то, находится она в отдельном файле или нет, является проблемой реализации.

1 голос
/ 08 июля 2010

Как упоминал Арпан, вы можете использовать ldd (который находится в пакете 'binutils'), чтобы узнать, какой SO-файл фактически используется для libc. Наиболее распространенной реализацией в системах Linux является библиотека GNU C , обычно называемая glibc.

0 голосов
/ 08 июля 2010

Если вы упомянули DLL, я предполагаю, что вы используете Windows.В этом случае обычно есть одна DLL времени выполнения, поставляемая с компилятором.С Visual C ++, я полагаю, имя msvcrt.dll или подобное.

...