在另一台 PC 上执行程序时加载 SDL2 共享库时出错
Error loading SDL2 shared libraries while executing program on another pc
我正在尝试编译我使用 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以获取更多信息。
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- CoreCLR 中的检测探查器 - 将帮助程序程序集加载到 dotnet 进程的方法
- 如何在没有"路径"模块的情况下加载 cheerp-wasm 程序?
- 使用动态链接加载程序 <dlfcn.h> 而不是直接函数调用的目的是什么?
- 在另一台 PC 上执行程序时加载 SDL2 共享库时出错
- 从 C 可执行文件加载动态库时收到错误C++"undefined symbol"
- WinAPI C++如何从 64 位应用程序加载资源
- .NET核心应用程序无法加载C++DLL
- 可执行文件库加载的操作
- 每次b/c程序无法加载级联时,使用harr级联的人脸识别都会失败
- 部署时QT SQLITE问题:未加载驱动程序
- 将整个输入行加载到程序中
- 在win32加载程序之前执行代码
- 正在加载一个程序集,该程序集与加载应用程序目录之外的目录中的其他程序集具有相关性
- 哪些语言生成字节码,并且可以在C++中加载/执行
- 应用程序无法从WinSxS加载Win32程序集
- Silverlight中动态加载的程序集调用DllImprot来锁定文件
- 在Windows启动时加载应用程序
- 在执行程序时,整个库是否会加载到内存 (RAM) 中
- 是否有可能在程序执行过程中通过函数加载精灵、纹理和音乐?