Visual C ++ DLL: наследование и использование класса, определенного в статической библиотеке

Я пытаюсь создать 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?

2

Решение

Можете ли вы открыть командную строку Visual Studio и запустить DumpBin и / или Lib, чтобы увидеть, что находится в GroovyClass.lib? Убедитесь, например, что GroovyClass :: GroovyClass находится там.

0

Другие решения

Код и реализация были правильными с самого начала!

Актуальная проблема и решение:
Система сборки, которую я использовал (бам) использовали разные «входные таблицы» при создании статических библиотек и общих библиотек.

Так что для будущих пользователей бам; использовать стол settings.dll вместо settings.link если вы создаете и связываете DLL.

0

По вопросам рекламы [email protected]