【问题标题】:C++: "unresolved external symbol" when creating .dll in VS2010 after the .lib sucecssfully buildsC++:在 .lib 成功构建后在 VS2010 中创建 .dll 时出现“无法解析的外部符号”
【发布时间】:2012-03-26 14:13:29
【问题描述】:

这是我第一次尝试创建一个 .dll,它将用作 3rd 方应用程序的插件。

我在 VS210 中创建了一个 .dll 项目...新建项目 -> Win32 控制台应用程序 -> .dll + 空项目选项。

然后我添加了我想使用的文件,并包含了各种包含/依赖库所需的代码。此外,将链接器设置为包含输出 .lib

配置属性 -> 链接器 -> 高级 -> 导入库 - $(OutDir)$(TargetName).lib

当 .lib 成功编译时,一旦 VS 尝试构建 .dll,我就会收到与所有已定义函数名称相关的“未解析的外部符号”错误。

ClCompile:
SOMPlugin.cpp
Link:
Creating library F:\Data\My Documents\Visual Studio 2010\Projects\Plugin-SOM - Copy\Release\Plugin-SOM.lib and object F:\Data\My Documents\Visual Studio 2010\Projects\Plugin-SOM - Copy\Release\Plugin-SOM.exp
SOMPlugin.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall SOMPlugin::metaObject(void)const " (?metaObject@SOMPlugin@@UBEPBUQMetaObject@@XZ)
SOMPlugin.obj : error LNK2001: unresolved external symbol "public: virtual void * __thiscall SOMPlugin::qt_metacast(char const *)" (?qt_metacast@SOMPlugin@@UAEPAXPBD@Z)
SOMPlugin.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall SOMPlugin::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@SOMPlugin@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
SOMPlugin.obj : error LNK2001: unresolved external symbol "protected: virtual void __thiscall SOMPlugin::updateView(void)" (?updateView@SOMPlugin@@MAEXXZ)
SOMPlugin.obj : error LNK2001: unresolved external symbol "protected: virtual void __thiscall SOMPlugin::updatedObject(int,class UpdateType const &)" (?updatedObject@SOMPlugin@@MAEXHABVUpdateType@@@Z)
SOMPlugin.obj : error LNK2001: unresolved external symbol "protected: virtual void __thiscall SOMPlugin::addToolbox(class QString,class QWidget *)" (?addToolbox@SOMPlugin@@MAEXVQString@@PAVQWidget@@@Z)
SOMPlugin.obj : error LNK2001: unresolved external symbol "protected: virtual void __thiscall SOMPlugin::log(class QString)" (?log@SOMPlugin@@MAEXVQString@@@Z)
SOMPlugin.obj : error LNK2001: unresolved external symbol "protected: virtual void __thiscall SOMPlugin::log(enum Logtype,class QString)" (?log@SOMPlugin@@MAEXW4Logtype@@VQString@@@Z)
SOMPlugin.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall SOMPlugin::~SOMPlugin(void)" (??1SOMPlugin@@UAE@XZ) referenced in function "public: virtual void * __thiscall SOMPlugin::`scalar deleting destructor'(unsigned int)" (??_GSOMPlugin@@UAEPAXI@Z)
SOMPlugin.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const SOMPlugin::staticMetaObject" (?staticMetaObject@SOMPlugin@@2UQMetaObject@@B)
F:\Data\My Documents\Visual Studio 2010\Projects\Plugin-SOM\Release\Plugin-SOM.dll : fatal error LNK1120: 9 unresolved externals

任何帮助将不胜感激。

【问题讨论】:

  • 需要看一些代码。 :( 这是否与 Qt 有关?

标签: c++ visual-studio-2010 dll linker


【解决方案1】:

即使您遇到链接器错误,也会生成lib。我们来看一个:

SOMPlugin.obj:错误 LNK2001:未解析的外部符号“公共: 虚拟结构 QMetaObject const * __thiscall SOMPlugin::metaObject(void)const " (?metaObject@SOMPlugin@@UBEPBUQMetaObject@@XZ)

这告诉你你还没有实现方法SOMPlugin::metaObject(void)const。有吗?

其他都差不多,除了

SOMPlugin.obj:错误 LNK2001:未解析的外部符号“公共: 静态结构 QMetaObject 常量 SOMPlugin::staticMetaObject" (?staticMetaObject@SOMPlugin@@2UQMetaObject@@B)

在这种情况下,您需要在类定义之外的实现文件中定义静态成员。

【讨论】:

  • 对不起,我刚刚意识到我忘了包含一些额外的文件。感谢您的帮助。
猜你喜欢
  • 2012-04-14
  • 2012-09-18
  • 2013-07-17
  • 2012-09-14
  • 2014-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多