Библиотеки компилятора и библиотеки операционных систем - программирование

Библиотеки компилятора и библиотеки операционных систем

Я заметил, что оба моих компилятора (MinGW) и Windows 8 SDK поставляются с одинаковыми библиотеками, сохраняйте соглашения об именах (т.е. win32.lib в Windows 8 SDK libwin32.a в библиотеках MinGW).

  • У всех компиляторов есть такие библиотеки?
  • Являются ли эти библиотеки для нескольких операционных систем?
  • В чем разница (если есть) между библиотеками, поставляемыми с SDK Windows 8, и теми, которые поставляются вместе с компилятором?
4b9b3361

Ответ 1

Существует два типа библиотек:

  • Импортировать библиотеки:
    Эти библиотеки только перечисляют, где найти ссылки на переменные/функции/и т.д., Но они не содержат самого кода.

  • "Обычные" библиотеки (содержащие объектные файлы, содержащие машинный код):
    Эти библиотеки содержат объектные файлы, которые содержат фактический машинный код.

Библиотеки, которые поставляются с операционной системой, обычно являются библиотеками импорта.
Фактический код, в конце концов, находится в самой операционной системе; библиотеки импорта просто говорят вам, как использовать код, предоставляемый в операционной системе.
Почему это необходимо? Поскольку программа не может "обнаружить" библиотеки, доступные в операционной системе во время ее запуска, поэтому программа должна знать, что будет доступно при ее компиляции.

Те, которые поставляются вместе с компилятором, обычно представляют собой библиотеки кода; они содержат код, который требуется компилятору (который зависит от вашего конкретного компилятора), чтобы завершить вашу программу.

Однако для библиотеки нет единого "стандартного формата"; Microsoft использует COFF, но * nix-инструменты используют ELF.
Поэтому, когда Microsoft отправляет библиотеки импорта для системы, она отправляет их только в формате COFF, что отлично подходит для компилятора Visual С++, но не так полезно для других компиляторов.

Это приводит к тому, что поставщики компилятора, такие как MinGW, вынуждены создавать свои собственные библиотеки импорта для операционных систем, на которые они нацелились, - цель этих библиотек точно такая же, как и у поставщиков операционной системы (таких как как Microsoft), но их формат отличается.

Вот почему вы видите похожие библиотеки, предоставляемые несколькими способами.

Ответ 2

MinGW поставляется со своим набором SDK-библиотек по той простой причине, что MinGW предназначен для предоставления свободно доступной реализации компилятора, которая может создавать программы для Windows, но SDK для Windows не является свободно доступным в том смысле, что разработчики MinGW хотят/необходимость. Из-за лицензии на SDK Microsoft Windows это не то, что можно просто распространить с помощью компилятора MinGW. Таким образом, значительная часть усилий по разработке MinGW представляет собой набор заголовков и библиотек, которые обеспечивают функциональность Windows SDK, не нарушая условия лицензирования Microsoft.

Яркий бит MinGW WinSDK является общедоступным (возможно, даже большинством или всего). Все это свободно распространяемый открытый исходный код.

Также могут возникнуть проблемы совместимости с MinGW с использованием объектных файлов и библиотек MS, но я был удивлен, обнаружив, что MinGW может часто ссылаться на объектные файлы и библиотеки, созданные компиляторами MS (хотя я не уверен, что есть какие-либо гарантии что он поддерживается).

Связанная с этим проблема заключается в том, что MinGW в значительной степени опирается на DLL-версию среды msvcrt.dll C, предоставленную Microsoft. Но эта DLL не распространяется на MinGW - это часть каждой ОС Windows, поэтому MinGW полагается на то, что она просто присутствует в качестве базовой ОС.