您如何阅读MSVC C ++链接错误

时间:2016-04-18 13:32:22

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

有人可以向我解释一般如何阅读MSVC链接错误。

一个例子就是我刚刚点击的一个例子,我知道这意味着在我的代码中的某个地方,我试图动态地链接一些不存在的东西。

我想了解的是如何正确阅读错误消息,以便我能确切地知道我在哪个模块上留下了一个dllimport。

Error LNK2019 unresolved external symbol "__declspec(dllimport) public: enum SILLY::PixelFormat __cdecl SILLY::Image::getSourcePixelFormat(void)const " (__imp_?getSourcePixelFormat@Image@SILLY@@QEBA?AW4PixelFormat@2@XZ) referenced in function "public: virtual class CEGUI::Texture * __cdecl CEGUI::SILLYImageCodec::load(class CEGUI::RawDataContainer const &,class CEGUI::Texture *)" (?load@SILLYImageCodec@CEGUI@@UEAAPEAVTexture@2@AEBVRawDataContainer@2@PEAV32@@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。

load@SILLYImageCodec@CEGUI@@UEAAPEAVTexture@2@AEBVRawDataContainer@2@PEAV32@@Z位让我失望 - 似乎倒退了。

2 个答案:

答案 0 :(得分:2)

这意味着链接器无法找到函数SILLY::Image::getSourcePixelFormat中调用(或以其他方式引用)的函数CEGUI::SILLYImageCodec::load

该错误与静态与导入库几乎没有关系,它无法在它查找的任何库中找到。如果找不到它,链接器将产生相同的错误,无论如何你想要的功能。您收到错误是因为您可能没有为您希望它使用的库提供链接器(根据您的说法,这可能是错误,但可能是由多种原因造成的; see here for more) 。

名称修改可能很麻烦,除非你想写一个名称demangler,你通常可以忽略它(寻找漂亮的打印名称)。

答案 1 :(得分:0)

所有' @'标志是错误的名称。您通常可以忽略这一点,因为链接器已经为您解除了它。看起来dllimport附加到SILLY :: Image类,可能是在' class'之间的宏的形式。和班级名称。