2

我正在尝试构建一个 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 项目中使用/继承它?

4

2 回答 2

0

您能否打开 Visual Studio 命令提示符并运行 DumpBin 和/或 Lib 以查看 GroovyClass.lib 中的内容?确保例如 GroovyClass::GroovyClass 在那里。

于 2013-07-08T17:13:37.123 回答
0

代码和实现从一开始就是正确的!

实际问题和解决方案: 我使用的构建系统(bam)在构建静态库和共享库时使用了不同的“输入表”。

所以对于bam的未来用户;如果您正在构建和链接 DLL,请settings.dll使用该表。settings.link

于 2013-07-09T18:16:49.543 回答