1 / 1 / 0
Регистрация: 22.07.2024
Сообщений: 3
|
|
1 | |
Использование одного проекта другим внутри одного солюшена22.07.2024, 20:19. Показов 3151. Ответов 2
После долгих лет программирования на Java решил попробовать современный C++ и для этого установил последнюю версию Microsoft Visual Studio Community 2022 с MSVC.
В солюшене создал два проекта - cpp-db и cpp-db-test. Первый проект - это простая заготовка статической .lib библиотеки, которая пока ничего полезного не делает. А второй проект - это простенькое консольное приложение, которое печатает приветствие и вызывает конструктор класса из cpp-db библиотеки. Конструктор тоже лишь выводит приветствие. В начале возникла проблема, как познакомить первый проект со вторым. Это оказалось не столь простой задачей, как в Java + Maven. С этого места прошу комментировать мои действия и сообщать что я сделал не так или как было бы лучше сделать. Вначале, через правый клик, я пометил второй проект как "Set as Startup Project". После этого название/директория проекта в Solution Explorer стало выделяться жирным шрифтом. Это позволило его запускать через Ctrl+F5, пока ещё без обращения ко второму проекту. Затем я добавил директорию первого проекта в Additional Include Directories второго проекта как $(SolutionDir)cpp-db Это позволило использовать #include "database.h" в main.cpp проекта cpp-db-test. Но вызывать конструктор я ещё не мог, это приводило к ошибке Код
Severity Code Description Project File Line Suppression State Details Error LNK2019 unresolved external symbol "public: __cdecl Database::Database(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0Database@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function main cpp-db-test D:\develop\cpp-db\cpp-db-test\main.obj 1 Error LNK1120 1 unresolved externals cpp-db-test D:\develop\cpp-db\x64\Debug\cpp-db-test.exe 1 Если я меняю тип первого проета со статической .lib библиотеки на динамическую .dll библиотеку проект не собирается, с ошибкой: Код
Severity Code Description Project File Line Suppression State Details Error LNK1104 cannot open file 'D:\develop\cpp-db\x64\Debug\cpp-db.lib' cpp-db-test D:\develop\cpp-db\cpp-db-test\LINK 1 Как сделать всё то же самое при помощи CMake? Или какой другой системой сборки, совместимой с MSVC, вы бы воспользовались? Будет ли такое решение (CMake или другое) работать не только в MSVC, а допустим ещё и в MINGW64 с GCC?
0
|
22.07.2024, 20:19 | |
Ответы с готовыми решениями:
2
Использование команд одного класса другим классом Как сделать так, что при совпадении одного объекта с другим происходило удаление одного из них Можно ли из одного проекта управлять другим проектом? Доступ к свойствам объекта одного проекта из другого проекта одного решения Как копировать модуль и форму внутри одного проекта |
567 / 469 / 99
Регистрация: 05.08.2022
Сообщений: 2,563
|
|
23.07.2024, 07:41 | 2 |
Для линковки проекта cpp-db-test нужна именно cpp-db.lib (это специальньная lib с экспротируемыми из dll функциями). И она явно создается, раз dll собирается. Надо найти где эта lib создается и проекту cpp-db-test прописать путь до этой lib в настройке VC++ Directories --> Library Directories
Однако, чтобы можно было вызывать функции/методы из DLL их надо экспротировать из DLL. Для просто функций экспорт понятно как делать (гуглить по "как экспортировать функции из DLL", я на память не помню все моменты) А вот как заэкспротировать из DLL методы класса, конструктор.... хм, чета не делал такого. Но явно можно нагуглить как это делать по фразе на предыдущей строке или просто "C++ как создать класс из DLL"
0
|
Вездепух
12768 / 6650 / 1790
Регистрация: 18.10.2014
Сообщений: 16,809
|
|
23.07.2024, 08:33 | 3 |
Никак, ибо это неправильно.
Нет, искаться должен именно .lib . Даже когда вы компилируете .dll , рядом с ней все равно должен создаваться маленький промежуточный .lib - библиотека импорта. И линковать вы будете все равно именно этот .lib .Если у вас проставлена Reference на проект библиотеки, все должно получаться само собой.
0
|
23.07.2024, 08:33 | |
23.07.2024, 08:33 | |
Помогаю со студенческими работами здесь
3
getServletContext().setAttribute использование внутри больше одного класса как сделать ссылку из страницы одного проекта на страницу другого проекта? Как вставить User Control из одного проекта в Frame главного проекта? Как импортировать пакет одного проекта в классах другого проекта Приоритеты одного на другим? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |