【发布时间】: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_Init或SDL_Init? -
嗯,我必须检查一下 SDL_Init...
-
虽然你写了
_SDL_FillRect等,但我猜你的代码中没有前导下划线,因为编译器会抱怨而不是链接器。你真的确定你的链接器设置是正确的吗?你能给他们看看吗? -
编译标志似乎是相同的,而且,据我所知,SDL_Init 等被按预期调用。我已经链接到 SDL 的预编译版本,所以我不确定调试/发布。我唯一的猜测是那里有些东西不正确,所以,现在,我试着自己构建 SDL 看看会发生什么。完成后我会回复。
标签: c++ visual-studio-2010 linker sdl dynamic-linking