官方文档中是否提到了 SDL 的链接器选项?

Are SDL's linker options mentioned in the official documentation?

提问人:Christianidis Vasilis 提问时间:7/27/2022 最后编辑:genpfaultChristianidis Vasilis 更新时间:7/28/2022 访问量:153

问:

我开始在 Windows 下将 SDL2 库Code::Blocks IDE 一起使用。我下载了用于编译的 mingw64 的二进制文件,并在编译器和链接器选项中包含了搜索目录。

我的简单程序无法编译:

//Using SDL and standard IO
#include <SDL.h>
#include <stdio.h>


int main( int argc, char* args[] )
{

//Initialize SDL
SDL_Init( SDL_INIT_VIDEO );

//Quit SDL subsystems
SDL_Quit();

return 0;
}

将错误返回给我:

main.c:13:对“SDL_Init”的未定义引用

main.c:16:对“SDL_Quit”的未定义引用

对“WinMain”的未定义引用

原来我错过了使用链接器选项:

-lmingw32 -lSDL2main -lSDL2

linker options lsd

如果没有本教程和其他在线论坛的帮助,我无法发现我错过了链接器选项。我正在查找 SDL 的官方文档和 wiki,这在任何地方都没有提到。

由于这种情况经常发生在我身上(我去尝试使用库,官方文档没有提到编译库的重要步骤。有时它没有提到你需要包含的文件,有时它没有提到你需要的链接器选项。我的问题是:

使用 SDL 库的人如何在没有论坛和教程帮助的情况下发现他们需要使用这些链接器设置?我能从它在编译时给我的错误中找出答案吗?

我不是把这个问题笼统起来,我在这个特定的库中强调,但我遇到的问题是笼统的。

c 链接器错误 SDL-2 未定义的引用

评论

1赞 Mark Benningfield 7/27/2022
链接到依赖库是编译 C 项目时的基本“给定”。通常不会指定特定的链接器选项,因为“每个人都”知道它是必需的,并且链接器开关可能因工具链而异。
0赞 keltar 7/27/2022
wiki.libsdl.org/FAQs .当事情与“普通”不同时,它们通常会在头文件的自述文件或注释中提及。

答:

1赞 HolyBlackCat 7/28/2022 #1

在Linux上,获取库标志的标准化方法是 running ,它查询与库一起分发的文件。(如果您正在使用它,CMake 也提供了自己的获取标志的方式。pkg-config.pc

如果您使用 MinGW(没有 CMake),您也可以(并且应该)在 Windows 上使用。手动安装它可能很乏味,但 MSYS2 将其作为软件包提供。从 MSYS2 安装的库通常开箱即用地使用 pkg-config。pkg-config

要使自行下载的 SDL2 使用它,必须将 env 变量设置为(已下载)所在的目录。PKG_CONFIG_PATHsdl2.pc

然后跑步会告诉你正确的标志。对我来说,它打印.pkg-config --libs --define-prefix sdl2-L/mingw64/lib -lSDL2main -lmingw32 -lSDL2main -lSDL2 -mwindows

您也可以用自己的眼睛手动查阅文件。标志以明文形式存储在其中。sdl2.pc

评论

2赞 the busybee 7/28/2022
一个有用的命令是列出它已知的所有库。pkg-config --list-all