Библиотеки в C ++ также считаются полезными, но способ их интеграции отличается от Java, поскольку компилятор должен видеть только интерфейс библиотеки, который обычно объявляется в файлах заголовков. В Java компилятор должен будет проверить фактические библиотеки, потому что в Java нет такого различия между видимым извне файлом заголовка и сгенерированным объектным кодом, обеспечивающим реализацию.
Обычно вы создаете библиотеки отдельно, один раз и помещаете сгенерированные файлы lib / dll плюс файлы заголовков в место, к которому проекты, требующие библиотеки, могут получить доступ. Распространенная идиома - поместить файлы заголовков в include
, статические библиотеки в lib
, а динамические библиотеки в bin
подкаталоги для вашей скомпилированной библиотеки.
Причина, по которой вы обнаружили, что большинство библиотек C ++ предоставляется в форме исходного кода, а не в предварительно скомпилированной форме, заключается в том, что каждый компилятор C ++ имеет определенную свободу в отношении того, как искажать имена символов и т. Д., И полученный объектный код не переносится между компиляторами, пусть одни операционные системы. Поэтому отправка скомпилированного кода не имеет смысла для многих приложений. Иногда вы найдете его в библиотеках C ++ с закрытым исходным кодом в Windows (библиотеки C - совсем другое дело), но тогда поставщику придется предоставить скомпилированную версию для каждого типа сборки (Release, Debug, 32 bit, 64 бит и т. д.) и целевой компилятор (для разных версий Visual Studio требуются разные двоичные файлы, есть Borland и множество других компиляторов), и поддержка быстро становится кошмаром ...
Когда вы берете библиотеку и строите ее как динамическую библиотеку в Windows (например, DLL), компилятор / компоновщик обычно генерирует для нее статическую библиотеку «импорта» (то же имя, только с расширением .lib). Когда вы связываете свой проект с динамической библиотекой, вы указываете файл .lib как зависимость библиотеки. Связывание вашего приложения с указанной библиотекой импорта позволяет компоновщику записывать зависимость от файла .dll, а также то, какие символы он должен ожидать от библиотеки.
Чтобы заставить их работать - в том смысле, что ваша программа находит их в Windows - обычно требуется, чтобы файл .dll находился либо в том же каталоге, что и исполняемый файл, либо был доступен через переменную среды PATH и ее эквивалент в Visual C ++.
person
Community
schedule
17.10.2008