Библиотеки C распространяются вместе с компиляторами или непосредственно ОС? - PullRequest
6 голосов
/ 18 мая 2011

Насколько я понимаю, библиотеки C должны распространяться вместе с компиляторами. Например, GCC должен распространять свою собственную библиотеку C, а Forte должен распространять свою собственную библиотеку C. Правильно ли мое понимание?

Но может ли пользовательская библиотека, скомпилированная с GCC, работать с библиотекой Forte C? Если в системе присутствуют обе библиотеки C, какая из них будет вызвана во время выполнения?

Кроме того, если приложение связывается с несколькими библиотеками, некоторые из которых скомпилированы с GCC, а некоторые с Forte, библиотеки, скомпилированные с GCC, будут автоматически связываться с библиотекой GCC C и будут работать так же для Forte.

Ответы [ 6 ]

7 голосов
/ 18 мая 2011

GCC поставляется с libgcc, который включает вспомогательные функции для выполнения таких задач, как длинное деление (или даже более простые вещи, такие как умножение на процессорах без инструкции умножения). Это не требует конкретной реализации libc. FreeBSD использует производную от BSD, glibc очень популярен в Linux и есть специальные для встраиваемых систем, таких как avr-libc.

В системах может быть установлено много библиотек (libc и др.), И правила их выбора зависят от ОС. Если вы ссылаетесь статически, это полностью определяется во время компиляции. Если вы связываетесь динамически, в игру вступают правила версионирования и пути. Обычно вы не можете смешивать и сопоставлять во время выполнения из-за битов библиотеки (из заголовков), которые были скомпилированы в исполняемый файл.

Продукты компиляции двух компиляторов должны быть совместимы, если они оба следуют ABI для платформы. Это цель определения конкретного регистра и соглашений о вызовах.

3 голосов
/ 18 мая 2011

Что касается Solaris, ваше предположение неверно.Являясь интерфейсом между ядром и пользовательским пространством, стандартная библиотека C поставляется вместе с операционной системой.Это означает, что независимо от того, какой компилятор C вы используете (Forte / studio или gcc), всегда используется один и тот же libc.В любом случае, редкие порты стандартной библиотеки C Gnu (glibc) для Solaris весьма ограничены и, вероятно, не имеют слишком много возможностей для использования.http://csclub.uwaterloo.ca/~dtbartle/opensolaris/

2 голосов
/ 28 мая 2011

Ни в одном из других ответов (пока) не упоминается важная функция, которая способствует взаимодействию между компиляторами и библиотеками - ABI или двоичный интерфейс приложения.На Unix-подобных машинах имеется хорошо документированный ABI, и все компиляторы C в системе следуют ABI.Это позволяет много смешивать.Обычно вы используете предоставляемую системой библиотеку C, но вы можете использовать замещающую версию, поставляемую с компилятором или созданную отдельно.Как правило, вы можете использовать библиотеку, скомпилированную одним компилятором, с программами, скомпилированными другими компиляторами.

Иногда один компилятор использует библиотеку поддержки времени выполнения для некоторых операций - возможно, 64-битные арифметические процедуры на 32-битной машине,Если вы используете библиотеку, созданную с помощью этого компилятора, как часть программы, созданной с помощью другого компилятора, вам может потребоваться связать эту библиотеку.Однако я давно не видел в этом проблемы - с чистым C.

Связывание C ++ - это другое дело.Не существует одинаковой степени взаимодействия между различными компиляторами C ++ - они не согласны с деталями макета класса (vtables и т. Д.), А также с тем, как выполняется обработка исключений и так далее.Вам нужно больше работать над созданием библиотек, созданных с помощью одного компилятора C ++, который может использоваться другими.

1 голос
/ 28 мая 2011

Forte? Это действительно старый.

Предпочтительные компиляторы и средства разработки для Solaris содержатся в Oracle Solaris Studio. C / C ++ / Fortran с отладчиком, анализатором производительности и IDE на основе NetBeans и множеством библиотек.

http://www.oracle.com/technetwork/server-storage/solarisstudio/index.html

Это (все еще) бесплатно тоже.

1 голос
/ 18 мая 2011

Только некоторые вещи из библиотеки C являются обязательными в том смысле, что они не нужны для автономной среды.Он только должен предоставить то, что необходимо для заголовков

<float.h>, <iso646.h>, <limits.h>, <stdarg.h>, <stdbool.h>, <stddef.h>, and <stdint.h>

Они обычно не реализуют много функций, которые должны быть предоставлены.

Другие типы сред называются "размещенными"среда.Как видно из названия, они предполагают, что существует некая сущность, которая «размещает» запущенную программу, обычно ОС.Таким образом, библиотека C обычно предоставляется этой «хостинговой средой», но, как сказал Бен, в разных системах могут быть даже альтернативные реализации.

0 голосов
/ 18 июня 2014

Я думаю, что есть некоторая путаница с терминами: библиотека НЕ ​​является DLL или .so: в реальном смысле языков программирования библиотеки - это скомпилированный код, который LINKER объединит с нашим двоичным файлом ( .o). Таким образом, компоновщик (или компилятор через некоторые директивы ...) может управлять ими, но ОС не может, просто НЕ является концепцией, связанной с ОС.

Мы привыкли думать, что ОС написаны на C, и мы можем перестроить ОС, используя gcc / библиотеки или аналогичные, но C НЕ является linux / unix.

У нас также может быть ОС, написанная на языке Pascal (Mac OS была такой же много лет назад ..) И использовать библиотеки с нашим любимым компилятором C, ИЛИ иметь ОС, написанную на ASM (даже если не все, как в первом Версия для Windows), но мы должны иметь библиотеки C для сборки exe.

...