【问题标题】:unresolved external symbol even though i think i am linking correctly (MSVC)即使我认为我的链接正确(MSVC),也无法解析外部符号
【发布时间】:2026-01-23 13:15:02
【问题描述】:

我有一个项目使用 SDL 作为外部库。该项目使用 _SDL_WM_SetCaption、_SDL_FillRect 或 _SDL_MapRGBA 等函数。我已经告诉链接器包含两个库 SDL.lib 和 SDLmain.lib,并告诉它查看放置这些库的文件夹。我还使用 dumpbin.exe 检查了库文件,并且功能在那里。但是,它仍然无法编译/链接?为什么?有人有什么想法吗?

编辑:这是链接器/编译器错误的示例输出:



14>libtestd.lib(sdlgl.obj) : error LNK2019: unresolved external symbol _SDL_WM_SetCaption referenced in function "public: void __thiscall SDLGLEngine::SetTitle(char *)" (?SetTitle@SDLGLEngine@@QAEXPAD@Z)
14>libtestd.lib(sdlgl.obj) : error LNK2019: unresolved external symbol _SDL_FillRect referenced in function "public: bool __thiscall SDLGLEngine::Init(int,int,int,bool)" (?Init@SDLGLEngine@@QAE_NHHH_N@Z)
14>libtestd.lib(sdlgl.obj) : error LNK2019: unresolved external symbol _SDL_MapRGBA referenced in function "public: bool __thiscall SDLGLEngine::Init(int,int,int,bool)" (?Init@SDLGLEngine@@QAE_NHHH_N@Z)
14>libtestd.lib(sdlgl.obj) : error LNK2019: unresolved external symbol _SDL_SetVideoMode referenced in function "public: bool __thiscall SDLGLEngine::Init(int,int,int,bool)" (?Init@SDLGLEngine@@QAE_NHHH_N@Z)
14>libtestd.lib(sdlgl.obj) : error LNK2019: unresolved external symbol _SDL_GL_SetAttribute referenced in function "public: bool __thiscall SDLGLEngine::Init(int,int,int,bool)" (?Init@SDLGLEngine@@QAE_NHHH_N@Z)
14>libtestd.lib(sdlgl.obj) : error LNK2019: unresolved external symbol _SDL_Quit referenced in function "public: bool __thiscall SDLGLEngine::Init(int,int,int,bool)" (?Init@SDLGLEngine@@QAE_NHHH_N@Z)
14>libtestd.lib(sdlgl.obj) : error LNK2019: unresolved external symbol _SDL_Init referenced in function "public: bool __thiscall SDLGLEngine::Init(int,int,int,bool)" (?Init@SDLGLEngine@@QAE_NHHH_N@Z)

【问题讨论】:

  • 它们有相同的编译标志吗?像-MT/-MD?您是否链接到调试或发布版本?
  • 您是否将代码中的方法称为_SDL_InitSDL_Init
  • 嗯,我必须检查一下 SDL_Init...
  • 虽然你写了_SDL_FillRect 等,但我猜你的代码中没有前导下划线,因为编译器会抱怨而不是链接器。你真的确定你的链接器设置是正确的吗?你能给他们看看吗?
  • 编译标志似乎是相同的,而且,据我所知,SDL_Init 等被按预期调用。我已经链接到 SDL 的预编译版本,所以我不确定调试/发布。我唯一的猜测是那里有些东西不正确,所以,现在,我试着自己构建 SDL 看看会发生什么。完成后我会回复。

标签: c++ visual-studio-2010 linker sdl dynamic-linking


【解决方案1】:

可能的原因:

  • sdl.lib 和 sdlmain.lib 设置未添加到依赖项列表中
  • 它们的位置未添加到链接器所在的目录列表中
  • 您的库的 32 位和 64 位版本不匹配。

【讨论】: