Что мне нужно добавить в проект, чтобы включить библиотеки?

0

Сегодня у меня была путаница о том, как работают библиотеки в c/c++. В некоторых местах у меня красный цвет, включая файл, просто заменяет оператор #include кодом из этого файла, а в других - красным, что.lib файлы сгенерированы, и мне нужно их связать.. на данный момент у меня нет подскажите, что думать.

Допустим, у меня есть библиотека A, библиотека B и исполняемый C. Все отдельные проекты, но в рамках одного и того же решения, все еще имеют свои файлы.h и.c, а файлы.lib - только для того, чтобы быть ясным. Библиотека B требует, чтобы библиотека A и исполняемый C требовали, чтобы библиотека B функционировала.

Каков правильный способ сделать это? Очевидным является добавление заголовка требуемого заголовка в зависимый проект в его "дополнительные включенные каталоги", но что тогда?

  1. Добавить ссылку на требуемый проект?
  2. Я помечен как зависимый в менеджере зависимостей решения?
  3. Добавляю ли я гипотетические.lib файлы и каталоги, которые они появятся в настройках компоновщика?
  4. Я делаю эти вещи для проекта, который сразу зависит от этих ресурсов или эта зависимость унаследована в других проектах, которые относятся к этому? (например, если B требует, чтобы A и C нуждались в B, тогда C нуждается в и B)
  • 1
    Включение заголовочных файлов действительно заменяет директиву содержимым файла. Обычно заголовочный файл - это просто куча предварительных объявлений. Это помогает компилятору компилировать этот модуль компиляции. На более позднем этапе вам придется со временем связать реальный код, который соответствует предварительным объявлениям из заголовочного файла. Вы должны прочитать о шагах компиляции: компиляция вашего файла - только один из них. Связывание становится более поздним шагом.
  • 0
    Я помечаю некоторые ссылки в Google, если я правильно понял, каждый из этих проектов создает объектный файл, а затем компоновщик объединяет их. Это легко понять с точки зрения командной строки, но как это работает с VS? Каждый проект имеет свои параметры компоновщика. Разве только тот, где я выполняю компиляцию из материи? Или к ним относятся как к иерархическим субсвязывающим вещам? И мне нужно указать, где файлы obj будут создаваться? (Я проверил, прямо сейчас они находятся в папке отладки) И что такое ссылки в VS?
Теги:
visual-studio

1 ответ

1
Лучший ответ

Как вы говорите, первое, что нужно сделать, это настроить каталоги включения каждого проекта, чтобы каждый мог видеть файлы заголовков.h, которые ему нужны. Заголовочные файлы содержат только код, который объявляет имена и параметры функций (и экспортированных переменных), содержащихся в библиотеках. Это позволяет вам писать код, который ссылается на эти функции, и он будет компилироваться.

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

Трудный (но иногда полезный) способ

2.Я считаю, что это зависит от менеджера зависимостей в решении?

Вам не нужна техническая помощь, чтобы связать проекты, но вы найдете их полезными. Правильная настройка зависимостей (т.е. Проект C зависит от проекта B, а проект B зависит от проекта A) сообщает Visual Studio о том, какой заказ строить проекты, когда вы нажимаете "build all". Зависимости также говорят, какие проекты нужно перестраивать при внесении изменений. Например, если вы что-то меняете в проекте B и перестраиваете, он знает, что ему также нужно перестроить проект C, но не проект A.

3. Добавляю ли гипотетические.lib файлы и каталоги, которые они появятся в настройках компоновщика?

Да. Файлы.lib содержат фактические реализации функций, необходимые для создания окончательного исполняемого файла.

4. Я делаю эти вещи для проекта, который сразу зависит от этих ресурсов или эта зависимость унаследована в других проектах, которые относятся к этому? (например, если B требует, чтобы A и C нуждались в B, тогда C нуждается в и B)

Или. Они фактически не связаны друг с другом до тех пор, пока окончательный исполняемый файл C не будет связан, поэтому вы можете просто добавить библиотеки A и B в настройки компоновщика C. Или вы можете добавить lib A к настройкам компоновщика проекта B, а B - к настройкам компоновщика C, а компоновщик будет работать над "унаследованным" требованием.

Легкий (но менее контролируемый) способ

Теперь за хорошие новости...

1. Добавляю ли ссылку на требуемый проект?

Вам вообще не нужно использовать ссылки. Но если вы устанавливаете ссылки (поэтому C имеет ссылку на B, а B имеет ссылку на A), тогда Visual Studio сортирует зависимости, порядок сборки и пути компоновщика для вас! Поэтому, если вы это сделаете (1), вам не нужно беспокоиться о своих вопросах (2), (3) или (4). Иногда вам может потребоваться более тонкий контроль, хотя полезно понимать, что происходит "под капотом".

  • 0
    Отлично, теперь я все знаю!
  • 0
    Всё в МИРЕ мухахахахахахаха

Ещё вопросы

Сообщество Overcoder
Наверх
Меню