Как вручную добавить библиотеку в проект Visual Studio 2017?

Приношу свои извинения за этот очень простой вопрос, который, несомненно, задавался и на который уже был дан ответ, а также за мою очень устаревшую терминологию. Я искал ответ, но ничего полезного не нашел. Я использую последнее обновление сообщества VS 2017 и пытаюсь вручную добавить то, что я раньше называл «библиотекой функций», в проект, который находится под «решением».

Проект представляет собой просто консольное приложение C++ или C#. У меня есть файл .h (заголовок), файл .lib (статическая библиотека) и файл .dll (динамическая библиотека). Я намереваюсь выполнять «вызовы функций» в эту библиотеку. Я знаю, что мне нужна моя dll в папке отладки, где находится исполняемый файл, но я не уверен, как «добавлять зависимости» в VS 2017. Я знаю, как управлять пакетами NuGet и устанавливать их, но эти файлы не Это удобный пакет NuGet.

Я надеюсь получить совет, как сделать это правильно (VS 2017).

взгляните на Как добавить ссылки в VS2017, это может помочь.

vikscool 10.09.2018 06:02

@vikscool, спасибо за ссылку. Определенно стоит прочитать, но это не относится конкретно к старым статическим библиотекам и файлам заголовков. Но я попробую.

joglidden 10.09.2018 06:15
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
2
13 334
1

Ответы 1

В подобной ситуации я создаю папку, использую 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.

Дайте мне знать, если это все еще непонятно, и я постараюсь уточнить.

Хорошо, спасибо за этот совет. Я закружу и доложу здесь.

joglidden 11.09.2018 22:11

Итак, могу ли я поместить файл .lib в подпапку \ library? А файлы .h и .dll помещаются в папку \ include? Очевидно я что-то упустил. Может, это не имеет значения.

joglidden 15.09.2018 06:14

Хорошо, я отказался от проекта C#. Я создал консольное приложение C++ и смог добавить файл .h в проект в разделе «Заголовочные файлы». Никогда не находил вкладку «Общие», и поэтому не мог найти запись для «дополнительных библиотечных каталогов». Вздох. Тем не менее, спасибо за предложения.

joglidden 15.09.2018 06:48

Хорошо .. это отличное разъяснение. Теперь у меня в баке больше бензина. Я приму это и доложу.

joglidden 17.09.2018 03:04

Хорошо, я сделал все, как вы описали, в том числе поместил копию моего файла .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 плохая.

joglidden 17.09.2018 03:57

Похоже, вы пытаетесь включить файл .dll как часть этапа связывания, то есть как один из Additional Dependencies в подразделе Input раздела Linker. Вы, вероятно, не захотите этого делать, вы должны включить туда файл .lib. После успешного подключения .lib операционная система позаботится о загрузке .dll, когда вы действительно запустите программу. Лучший способ запомнить это: .lib нужно было собрать, .dll нужно было запустить.

dgnuff 17.09.2018 07:43
В разделе свойств проекта компоновщика, также на вкладке «Общие», есть соответствующая запись для дополнительных библиотечных каталогов. Этого раздела нет в VS 2017 15.9.14. Я просто пытался связать файл .lib последние несколько дней, почему это так сложно? Это нелепо.
user2445507 28.07.2019 20:18

@ user2445507 Похоже, это исправлено в VS2019 16.2. Открывая Project Propertise / Linker / General, первые три записи - это Output File, Additional Dependencies и Additional Library Directories.

dgnuff 29.07.2019 22:02

Другие вопросы по теме