Visual Studio: включите .h или .cpp в двухпроектное решение - PullRequest
1 голос
/ 01 апреля 2012

У меня есть решение Visual Studio, содержащее 2 проекта: основной проект и тест (через googletest).В основном проекте у меня есть файлы myclass.cpp и myclass.h.Когда я пытаюсь скомпилировать тестовый проект, возникает множество ошибок LNK2019, когда я включаю «myclass.h» в мой файл test.cpp, но все работает нормально, если вместо этого я включаю «myclass.cpp».Это нормально?Насколько я знаю, включение файлов .cpp не рекомендуется и, как правило, этого можно избежать.Есть предложения?

Ответы [ 2 ]

2 голосов
/ 01 апреля 2012

Это нормально.Если у вас есть 2 проекта, будут сгенерированы 2 двоичных файла.

Не включайте файл cpp .

Вместо этого свяжите двоичные файлы вместе.

основной проект - генерирует файл .lib и либо .dll, либо .exe.

тестовый проект - включает заголовок из main.Вам нужно добавить .lib, сгенерированный main в дополнительные зависимости тестового проекта.Где-то в настройках проекта - Параметры компоновщика - Дополнительные зависимости.


Вы можете создать и .exe и .lib файл из одного проекта.Для этого вы устанавливаете:

  • exe in Linker -> General -> Output File
  • lib in Linker -> Advanced -> Import Library

Вам также может понадобиться пометить экспортированные функции с помощью __declspec( dllexport ) в проекте .exe (см. docs ), иначе компилятор не сгенерирует файл .lib.

1 голос
/ 01 июля 2015

Шаги по использованию Классы формируют другой проект (Добавить ошибки компоновщика заголовка и решателя)

1) Чтобы добавить заголовок из другого проекта, сначала перейдите на "Свойства> c ++> Общие> Дополнительные каталоги включения " и добавьте каталог, содержащий заголовок.Теперь вы сможете добавить заголовок класса из другого проекта, но запуск проекта все равно вызовет ошибки компоновщика.

2) Добавьте _ _declspec (dllexport) перед классомвы используете для другого проекта.Это может быть добавлено в заголовочный файл этого класса.Это должно быть добавлено непосредственно перед именем функции, переменной или класса.Теперь вы получите файл lib.(если расположено не в том месте, вы можете получить это предупреждение: https://msdn.microsoft.com/en-us/library/eehkcz60.aspx)

3) "Свойства> Линкер> Дополнительные каталоги библиотек" .Укажите местоположение создаваемого файла lib.

4) «Свойства> Linker> Input> Дополнительные зависимости» : добавьте имя файла lib.

...