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