Приношу свои извинения за этот очень простой вопрос, который, несомненно, задавался и на который уже был дан ответ, а также за мою очень устаревшую терминологию. Я искал ответ, но ничего полезного не нашел. Я использую последнее обновление сообщества VS 2017 и пытаюсь вручную добавить то, что я раньше называл «библиотекой функций», в проект, который находится под «решением».
Проект представляет собой просто консольное приложение C++ или C#. У меня есть файл .h (заголовок), файл .lib (статическая библиотека) и файл .dll (динамическая библиотека). Я намереваюсь выполнять «вызовы функций» в эту библиотеку. Я знаю, что мне нужна моя dll в папке отладки, где находится исполняемый файл, но я не уверен, как «добавлять зависимости» в VS 2017. Я знаю, как управлять пакетами NuGet и устанавливать их, но эти файлы не Это удобный пакет NuGet.
Я надеюсь получить совет, как сделать это правильно (VS 2017).
@vikscool, спасибо за ссылку. Определенно стоит прочитать, но это не относится конкретно к старым статическим библиотекам и файлам заголовков. Но я попробую.
В подобной ситуации я создаю папку, использую C:\Etc\SDKs\<name_of_library>
, а затем в этой папке создаю подпапку include
и подпапку lib
. Обратите внимание, что выбор папки верхнего уровня является совершенно произвольным, поместите его там, где это имеет для вас наибольший смысл.
В разделе свойств проекта C/C++
на вкладке General
или в соответствующем разделе для проектов C# есть запись для Additional include directories
. Добавьте туда путь к вашей вновь созданной папке include
. Это позволит вам включить файл заголовка и заставить его работать правильно.
В разделе свойств проекта Linker
, также на вкладке General
, есть соответствующая запись для Additional library directories
. Добавьте туда путь к вашей папке lib
. На следующей вкладке: Input
есть запись для Additional Dependencies
. Добавьте туда фактическое имя файла библиотеки.
Эти шаги должны позволить построить ваш проект с использованием имеющихся у вас файлов .h
, .lib
и .dll
.
- Редактировать, чтобы адресовать комментарии -
Файл .lib
действительно находится в папке ...\lib
, а файл .h
- в ...\include
, это правильно. Однако в исходном вопросе вы указали правильное расположение .dll
. Это должно быть где-то на пути поиска, который найдет исполняемый файл, поэтому проще всего находится в той же папке, что и исполняемый файл.
Вкладка General
- плохой выбор слов с моей стороны. Здесь могла бы быть лучше секция General
. При просмотре свойств проекта самая левая панель представляет собой древовидное представление различных разделов свойств. Когда все закрыто, кроме самого верхнего элемента, вы увидите
Configuration Properties
General
Debugging
VC Directories
> C/C++
> Linker
...
Если вы затем дважды щелкните C/C++
, он откроется и покажет разделы, относящиеся к компилятору C / C++:
Configuration Properties
General
Debugging
VC Directories
V C/C++
General <<<<<
Optimization
Preprocessor
...
> Linker
...
Если вы нажмете на слово «Общие», которое я выделил, вы попадете в раздел / вкладку «Общие», о которых я говорил.
Аналогичным образом, двойной щелчок по слову Linker
откроет этот раздел, а под ним вы найдете разделы Linker General
и Input
.
Дайте мне знать, если это все еще непонятно, и я постараюсь уточнить.
Хорошо, спасибо за этот совет. Я закружу и доложу здесь.
Итак, могу ли я поместить файл .lib в подпапку \ library? А файлы .h и .dll помещаются в папку \ include? Очевидно я что-то упустил. Может, это не имеет значения.
Хорошо, я отказался от проекта C#. Я создал консольное приложение C++ и смог добавить файл .h в проект в разделе «Заголовочные файлы». Никогда не находил вкладку «Общие», и поэтому не мог найти запись для «дополнительных библиотечных каталогов». Вздох. Тем не менее, спасибо за предложения.
Хорошо .. это отличное разъяснение. Теперь у меня в баке больше бензина. Я приму это и доложу.
Хорошо, я сделал все, как вы описали, в том числе поместил копию моего файла .dll в папку \ lib, потому что я получал ошибку LINK : fatal error LNK1104: cannot open file 'ModelRisk_Core.dll'
, потому что я думаю, что компоновщик искал dll. Однако после этого я получил сообщение об ошибке ModelRisk_Core.dll : fatal error LNK1107: invalid or corrupt file: cannot read at 0x2C8
Итак, теперь я думаю, что вы дали мне хорошие инструкции, но моя dll плохая.
Похоже, вы пытаетесь включить файл .dll
как часть этапа связывания, то есть как один из Additional Dependencies
в подразделе Input
раздела Linker
. Вы, вероятно, не захотите этого делать, вы должны включить туда файл .lib
. После успешного подключения .lib
операционная система позаботится о загрузке .dll
, когда вы действительно запустите программу. Лучший способ запомнить это: .lib
нужно было собрать, .dll
нужно было запустить.
@ user2445507 Похоже, это исправлено в VS2019 16.2. Открывая Project Propertise
/ Linker
/ General
, первые три записи - это Output File
, Additional Dependencies
и Additional Library Directories
.
взгляните на Как добавить ссылки в VS2017, это может помочь.