在另一台 PC 上执行程序时加载 SDL2 共享库时出错

Error loading SDL2 shared libraries while executing program on another pc

本文关键字:加载 执行程序 SDL2 共享 出错 PC 一台      更新时间:2023-10-16

我正在尝试编译我使用 SDL2 制作的程序,以便在其他计算机上工作(或在本例中为 test VM(。 我一直在用我认为正确的标志来编译它,例如g++ main.cpp -o main -lSDL2,但是当我尝试在另一个 Ubuntu 安装上执行它时,我收到此错误。

error while loading shared libraries: libSDL2-2.0.so.0: cannot open shared object file: No such file or directory

据我了解,这不是我的编译问题,而是我希望它在另一个 Linux 安装上如何工作的问题;我已经交叉编译(使用 mingw32(并在 Windows 上对其进行了测试(使用新安装的 VM(,使用 exe 添加了正确的 dll(似乎工作正常(,我希望它以类似的方式工作。

在这种情况下,标准是什么?我是否应该编写安装脚本以在目标计算机上安装库依赖项?还有我不知道的另一种方式吗?我从未发布过适用于Linux(或Windows(的应用程序,我正在努力寻找资源来"以正确的方式"做事。

感谢大家的建议,我最终选择了简单的方法,动态编译"易于安装"的库,例如-lSDL2和其他库静态(检查许可证,应该没问题(,如下所示:

g++ main.cpp -o main -Wl,-Bdynamic -lSDL2 -lSDL2_image -lSDL2_ttf -Wl,-Bstatic -lSDL2_gfx -static-libgcc -static-libstdc++

我将在我的文档中介绍如何安装所需的 SDL2 库。

我不确定您对pkg-config有多熟悉,但sdl2的输出是这样的:

-D_REENTRANT -I/usr/include/SDL2 -lSDL2

这是通过运行以下命令发现的:

pkg-config --cflags --libs sdl2

基本上,在实际链接到 SDL2之前,您需要指出它所在的位置。

该工具pkg-config旨在告诉您在 Linux 中链接到软件包时所需的信息。您正在链接到库,但您忘记告诉GCC库的位置。

如果要编译代码,请尝试以下操作:

g++ main.cpp -o runme `pkg-config --cflags --libs sdl2`

这将自动获取您需要在包含 SDL2 的情况下编译的所有标志。

哦,你应该注意,添加标志和库时的顺序很重要

!!关于SO有很多问题,编译器选项的顺序导致了所有问题。不要像那些人一样。我建议您搜索SO以获取更多信息。