C ++: «неразрешенный внешний символ» при создании .dll в VS2010 после успешной сборки .lib - PullRequest
2 голосов
/ 26 марта 2012

Я впервые пытался создать .dll, которая будет использоваться в качестве плагина для стороннего приложения.

Я создал проект .dll в VS210 ... Новый проект -> Консольное приложение Win32 -> .dll + Параметры пустого проекта.

Затем я добавил в файлы, которые хотел использовать, и включил различные библиотеки include / dependency, необходимые для кода. Кроме того, установите компоновщик для включения вывода .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

Любая помощь будет высоко ценится.

1 Ответ

3 голосов
/ 26 марта 2012

lib будет сгенерировано, даже если вы получите ошибки компоновщика.Давайте посмотрим на:@@ XZ)

Это говорит о том, что вы не реализовали метод SOMPlugin::metaObject(void)const.Вы?

Остальные похожи, кроме

SOMPlugin.obj: ошибка LNK2001: неразрешенный внешний символ "public: static struct QMetaObject const SOMPlugin :: staticMetaObject" (? StaticMetaObject)@ SOMPlugin @@ 2UQMetaObject @@ B)

В этом случае вам нужно определение статического члена вне определения класса в файле реализации.

...