Библиотеки в 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 ++.