【发布时间】:2013-07-08 16:55:26
【问题描述】:
我正在尝试构建一个 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 项目中使用/继承它?
【问题讨论】:
-
尝试使用公共继承。类 MassiveFail : 公共 GroovyClass
-
@manuell 刚试过,还是一样的 unresolved symbol 错误。 '未解析的外部符号 "public: __cdecl GroovyClass::GroovyClass....'
-
发布 full 错误消息(包括损坏的名称)并运行
dumpbin /SYMBOLS xxx.lib以查看 lib 中定义的符号。 -
@MartinBa @manuell 我发现了问题,一直都是我自己的错。我使用的构建系统 (bam) 在构建
.lib和.dll时使用了不同的“输入表”。所以对于bam的未来用户和搜索优化; 在构建 DLL 时,使用settings.dll而不是settings.link。 -
@andsve - 您应该将此评论添加为该问题的单独答案。 (因为毕竟它回答了问题)
标签: c++ visual-c++ dll static-linking build-tools