Как добавить внешние библиотеки для компиляции в VC ++?

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

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

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


person leeand00    schedule 17.10.2008    source источник
comment
Возможный дубликат Использование libpq с Visual Studios 2013, компиляция в DLL   -  person ivan_pozdeev    schedule 06.08.2018


Ответы (6)


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

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

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

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

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

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

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

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

person Tim    schedule 31.10.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 ++.

person Community    schedule 17.10.2008
comment
-1 Библиотеки, которые распространяются в виде двоичных файлов, поставляются с сопутствующей библиотекой импорта (.lib). Изменение имен здесь совершенно неуместно, так как имена символов перечислены в файле .lib. Независимо от того, являются ли эти символы искаженными именами компилятора (C ++), именами экспорта поставщика, перечисленными в файле .def, или (пере) именованными символами, назначенными разработчиком в командной строке компоновщика (/ EXPORT), не выполняется разница. Имена символов доступны любому компоновщику. - person IInspectable; 28.03.2014
comment
@IInspectable: изменение имени может быть неактуальным, но соглашения о вызовах и библиотека времени выполнения - нет. Если вы не будете осторожны при разработке библиотеки, вы можете легко привязать двоичный файл к определенной версии компилятора. - person Jørgen Fogh; 11.03.2016

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

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

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

person Dan    schedule 17.10.2008

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

person user893764    schedule 14.08.2011

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

person Mostafa Man    schedule 20.02.2013

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

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

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

person plinth    schedule 17.10.2008