Я пытаюсь создать DLL, которая реализует класс, который присущ классу в предварительно скомпилированной статической библиотеке.
Оба проекта имеют общий заголовочный файл, в котором объявлен первый класс (GroovyClass.h):
class GroovyClass
{
public:
GroovyClass();
virtual ~GroovyClass();
}
В статической библиотеке этот класс определен и реализован (GroovyClass.cpp) и скомпилирован (назовем результат GroovyClass.lib).
В общей библиотеке / DLL этот класс наследуется следующим образом:
#include "GroovyClass.h"
class MassiveFail : GroovyClass
{
public:
MassiveFail();
virtual ~MassiveFail();
}
Это компилируется, но на этапе связывания я получаю ошибки, касающиеся неразрешенные символы для конструктора и деструктора GroovyClass. Я связываюсь с GroovyClass.lib как обычно, поэтому я не понимаю, почему он не может найти символы.
Нужно ли объявлять GroovyClass каким-то особым образом, прежде чем я смогу использовать / наследовать его в моем проекте DLL?
Можете ли вы открыть командную строку Visual Studio и запустить DumpBin и / или Lib, чтобы увидеть, что находится в GroovyClass.lib? Убедитесь, например, что GroovyClass :: GroovyClass находится там.
Код и реализация были правильными с самого начала!
Актуальная проблема и решение:
Система сборки, которую я использовал (бам) использовали разные «входные таблицы» при создании статических библиотек и общих библиотек.
Так что для будущих пользователей бам; использовать стол settings.dll
вместо settings.link
если вы создаете и связываете DLL.