Библиотеки для стандартных вещей (т.е.: cout и т.д.) *ВОПРОСЫ НОВИЧКА* :)

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

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

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

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

Спасибо!


person Russel    schedule 08.07.2010    source источник
comment
В стандартной библиотеке C не будет cout или потоков.   -  person James McNellis    schedule 08.07.2010


Ответы (5)


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

person James McNellis    schedule 08.07.2010

Если вы используете Linux/некоторый вариант UNIX/AIX, попробуйте использовать ldd . Просто ради удовольствия попробовать что-то новое, введите ldd `what 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, скачайте файл depend.exe http://www.dependencywalker.com/ -- отличный инструмент

person Fanatic23    schedule 08.07.2010

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

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

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

person paxdiablo    schedule 08.07.2010
comment
libgcc не является стандартной библиотекой; это некоторый внутренний код реализации, который gcc использует для длинного деления и прочего. Стандартная библиотека обычно называется libc. - person R.. GitHub STOP HELPING ICE; 08.07.2010

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

person Sam Hanes    schedule 08.07.2010

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

person Miro A.    schedule 08.07.2010
comment
Программа может использовать более одной dll. Это имя msvcr**.dll, msvcp**.dll. т.е. msvcr80.dll, msvcr90.dll и так далее. - person SigTerm; 08.07.2010