2016-04-18 3 views
2

Может кто-нибудь объяснить мне, как читать сообщения об ошибках MSVC в целом.Как вы читаете ошибки связи MSVC C++

Примером является тот, который я только что ударил, что я знаю, означает, что где-то в моем коде я пытаюсь связать что-то динамически, которого нет.

То, что я хотел бы понять, как прочитать сообщение об ошибке правильно, так что я могу работать точно, какой модуль я оставил DllImport на в.

Error LNK2019 unresolved external symbol "__declspec(dllimport) public: enum SILLY::PixelFormat __cdecl SILLY::Image::getSourcePixelFormat(void)const " ([email protected]@[email protected]@[email protected]@XZ) referenced in function "public: virtual class CEGUI::Texture * __cdecl CEGUI::SILLYImageCodec::load(class CEGUI::RawDataContainer const &,class CEGUI::Texture *)" ([email protected]@[email protected]@[email protected]@[email protected]@[email protected]@Z) helloworldui C:\Users\XXXXXX\Documents\Audio Development\evil-sounds\build\helloworldui\cegui64sd.lib(ImageCodec.cpp.obj) 1

Я думаю, что это означает, что CEGUI::SILLYImageCodec::load пытается загрузить SILLY:Image::getSourcePixelFormat как dll, когда я хочу загрузить статическую библиотеку.

[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@Z бит отбрасывает меня - кажется, наоборот.

ответ

2

Это означает, что функция SILLY::Image::getSourcePixelFormat, вызываемая (или иным образом упомянутая) в функции CEGUI::SILLYImageCodec::load, не может быть найдена компоновщиком.

Ошибка имеет мало общего с библиотекой статических и импортных, она не может быть найдена в какой-либо библиотеке, в которой она находилась. Если он не может быть найден, компоновщик будет выдавать ту же ошибку, независимо от того, где вы предназначена для функции. Вы получаете ошибку, потому что, вероятно, не предоставили компоновщик с библиотекой, которую вы хотите использовать (из того, что вы говорите, это вероятная ошибка, но это может быть вызвано целым рядом причин: see here for more).

Название mangling может быть громоздким, если вы не хотите писать имя demangler, вы можете вообще игнорировать его (ищите красивые имена печати вместо этого).

0

Бит со всеми знаками «@» - это искаженное имя. Вы можете вообще игнорировать это, поскольку компоновщик уже развязал его для вас. Похоже, что dllimport привязан к классу SILLY :: Image, вероятно, в виде макроса между «классом» и именем класса.

Смежные вопросы