Developing a game engine
0 / 0 / 0
Регистрация: 25.04.2017
Сообщений: 87
|
|
1 | |
unresolved external symbol из-за того, что в lib файле, который использует exe, не определён сторонний класс27.07.2020, 17:18. Показов 1058. Ответов 4
Метки нет (Все метки)
Прежде всего, весь код в архиве. А тут лишь краткое описание происходящего.
DLL: - определён класс CFileSystem - собирается без ошибок LIB: - определён класс VGUI - используются методы CFileSystem - собирается без ошибок EXE: - линкуется LIB - получается поинтер на переменную типа CFileSystem и передаётся в новую переменную типа VGUI - при сборке жалуется на неразрешённые внешние символы: методы класса CFileSystem, в том числе конструктор. Ну это понятно. Причём ошибка как в obj-файле EXE, так и в obj-файле LIB Можно ли что-то предпринять в данной ситуации? В LIB CFileSystem необходим, но при этом он не должен быть определён там: ему там просто не место. PS. Решение называется так, как называется, потому что изначально я предпринимал попытки экспорта классов из DLL в EXE. Поняв, что ничего у меня без фабричного метода не выйдет (а его реализовывать я не хочу), остановился на использовании статичной библиотеки
0
|
27.07.2020, 17:18 | |
Ответы с готовыми решениями:
4
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16 nafxcwd.lib(thrdcore.obj) : error LNK2019: unresolved external symbol __endthreadex referenced in function Unresolved external symbol, unresolved token |
Вездепух
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,068
|
|
27.07.2020, 22:02 | 2 |
Если ваш LIB должен линковаться именно в EXE (как вы говорите), и вы хотите напрямую работать с методами
CFileSystem в EXE (как у вас сейчас), то тогда весь класс CFileSystem должен быть объявлен как dllexport при компиляции DLL и dllimport при компиляции всего остального. У вас этого не сделано. Неудивительно, что за пределами DLL этот класс не линкуется. Он просто не экспортируется из DLL вообще.Другое дело, если бы LIB линковался только в DLL... --- Для чего предназначен интерфейс IFileSystem ? Он выглядит так, как будто именно через него должны были решаться вопросы связывания (как это делается в COM, вместо вашей нынешней прямой линковки). Но вы через него вообще нигде даже и не пытаетесь работать. Зачем вы тогда вообще заводили IFileSystem ?
0
|
Developing a game engine
0 / 0 / 0
Регистрация: 25.04.2017
Сообщений: 87
|
|||||||||||
28.07.2020, 04:48 [ТС] | 3 | ||||||||||
IFileSystem нужен в конечном проекте для того, чтобы как раз не возникало ошибок с внешними символами. IFileSystem, в свою очередь, имеет базовым классом IBase и складируется в vector<IBase*>interfaces вместе с остальными интерфейсами. Доступ к интерфейсу из другого модуля осуществляется через экспортную функцию. Кину код уж для наглядности.
По поводу dllexport и dllimport: с ними ситуация не меняется и даже становится хуже. Прикрепил скриншоты: 1) мои родные ошибки; 2) ошибки при использовании dllexport/dllimport Речь ведь только об этом?
0
|
Вездепух
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,068
|
|||||||||||
28.07.2020, 05:57 | 4 | ||||||||||
Сообщение было отмечено Jodi Redlot как решение
Решение
Это прекрасно, но пока что в вашем коде он не используется "чтобы как раз не возникало ошибок с внешними символами". Ваш код напрямую работает с
CFileSystem . А IFileSystem в этом никак не участвует.Да, именно. Но что именно у вас там теперь понаписано из этого огрызка не ясно. --- Я чисто ради эксперимента переобъявил ваш класс как
--- Уточнение: для этого мне еще понадобилось подключить библиотеку импорта DLL. Где у вас в коде это подключение? У вас есть
ExportDLL.lib где у вас аналогичное подключение???(И что за странная манера использовать #pragma comment ? В Visual Studio у вас в проектах есть References именно для того, чтобы не заниматься подобной фигней.)
1
|
Developing a game engine
0 / 0 / 0
Регистрация: 25.04.2017
Сообщений: 87
|
|
28.07.2020, 06:14 [ТС] | 5 |
После подключения ExportDLL.lib всё слинковалось и заработало как надо. Спасибо вам большое.
А либу я приконтачил через #pragma comment чисто для наглядности. В конечном проекте я, конечно, таким не балуюсь.
0
|
28.07.2020, 06:14 | |
28.07.2020, 06:14 | |
Помогаю со студенческими работами здесь
5
Что такое "unresolved external symbol _WSACleanup@0"? Unresolved external symbol Unresolved external symbol Unresolved external symbol unresolved external symbol unresolved external symbol Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |