Общие библиотеки и языковые стандарты - PullRequest
2 голосов
/ 21 апреля 2011

AFAIK, ни стандарты C99, ни C ++ не знают о разделяемых библиотеках. Почему это так?

РЕДАКТИРОВАТЬ: Какова хорошая практика написания общих библиотек без дублирования версий Linux / Windows?

Спасибо.

Ответы [ 3 ]

6 голосов
/ 21 апреля 2011

Поскольку разделяемая библиотека является функцией ОС.

Ничего общего с каким-либо конкретным языком.

4 голосов
/ 21 апреля 2011

«Как писать общие библиотеки» Ульриха Дреппера ,
прочитайте первую страницу о них и их истории.

4 голосов
/ 21 апреля 2011

Я могу вспомнить несколько причин, почему это имеет смысл в 1999 году (как в случае с C99) или даже в 2011 году:

  • Все еще существуют системы, в которых используются C и C ++, которые не имеют общих библиотек. (Подумайте, встроенный.) Если стандарт предписал что-то, то жизнь создателей компиляторов / библиотек, нацеленных на платформы, где вопрос об общих библиотеках, не имеет значения, излишне трудна.

  • Различные операционные системы делают разные варианты дизайна в отношении разделяемых библиотек. Если бы стандарт предписывал что-то, это ограничило бы этот выбор. Здесь также есть много странного наследия, которое следует учитывать, поскольку реализации разделяемых библиотек со временем развивались.

Как и в случае со многими вещами в C и C ++, другие, более специфичные для платформы стандарты выполняют достаточно хорошую работу здесь, где сам язык оставил вещи неопределенными. В соответствии с man-страницами, которые я только что посмотрел, в POSIX.1-2001 указывается dlopen и др. Если вы ориентируетесь на Windows, вы знаете, где найти LoadLibrary / GetProcAddress. __declspec требования для Windows также могут быть заключены в макрос. Если вы заботитесь как о Windows, так и о системах POSIXy, то не так уж сложно написать слой, который делает правильные вещи. Я уверен, что много уже написано и доступно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...