Как вы добавляете внешние библиотеки для компиляции в VC ++? - PullRequest
12 голосов
/ 17 октября 2008

Я работал с парой компиляторов Visual C ++ (VC97, VC2005, VC2008), и я действительно не нашел четкого способа добавления внешних библиотек в мои сборки. Я пришел из фона Java, и в библиотеках Java все!

Я понимаю, что при компиляции проектов с открытым исходным кодом на моем компьютере с Linux все исходный код библиотеки, по-видимому, должен быть включен, за исключением этих файлов .so.

Также я слышал о статических библиотеках .lib и динамических библиотеках .dll, но я все еще не совсем уверен, как добавить их в сборку и заставить их работать. Как можно это сделать?

Ответы [ 6 ]

15 голосов
/ 17 октября 2008

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

8 голосов
/ 17 октября 2008

Хорошо. обычно вы не хотите загружать динамические библиотеки вручную, но если вы это сделаете, посмотрите на LoadLibrary. Затем вам нужно вызвать другие функции, чтобы получить адреса указателей на функции и так далее. Обычно это работает, даже если в DLL-файлах есть .lib-файлы для них .. поэтому, когда они нужны, они просто автоматически загружаются.

способ указания файлов .lib / статических библиотек находится в разделе «Свойства» / «Линкер» / «Ввод» -> «Дополнительные зависимости». в графическом интерфейсе.

если вы пишете это ... хорошо. вы просто указываете .lib файлы в командной строке во время ссылки.

7 голосов
/ 31 октября 2008

Я думаю, вы, возможно, спросите механику, как добавить lib в проект / решение в IDE ...

В 2003, 2005 и 2008 годах это нечто похожее на:

из обозревателя решений - щелкните правой кнопкой мыши проект выберите свойства (как правило, последний) Я обычно выбираю все конфигурации вверху ... Linker Ввод

Дополнительные зависимости входят туда

Хотелось бы сделать снимок экрана для этого.

В VC6 все по-другому со мной, так как это все из памяти

Настройки или свойства проекта, а затем перейдите на вкладку компоновщика и найдите, куда можно добавить библиотеки.

Пожалуйста, извините, случайный характер этого поста. Я думаю, что это то, что вы хотите.

3 голосов
/ 14 августа 2011

Для добавления библиотек это очень просто (если вы это имеете в виду) Project -> properties -> configure properties -> Linker -> Input -> дополнительные библиотеки. Подойдите к одной из библиотек и нажмите Enter. Вы освободили место для добавления библиотеки, например, как пирог:)

2 голосов
/ 20 февраля 2013

Чтобы добавить внешние библиотеки или каталоги библиотек в проект VC ++, выполните следующие действия:
1- Перейдите в свойства вашего проекта (это можно сделать, щелкнув правой кнопкой мыши по проекту в вашем решении)
2- Выберите «Linker»> «General»> «Дополнительные каталоги библиотек».
3. Нажмите на пустую панель перед «Дополнительные каталоги библиотек», и VS позволит вам добавить каталоги в каталоги по умолчанию, в которых он ищет нужные библиотеки.

1 голос
/ 17 октября 2008

Что значит "добавить их в сборку"?

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

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

...