我正在尝试编译使用SDL2制作的程序以在其他计算机上运行(或在这种情况下测试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安装上工作;我已经在Windows上交叉编译(使用mingw32)并对其进行了测试(使用新安装的VM),并使用exe添加了正确的dll(似乎可以正常工作),并且希望它以类似的方式工作。
这种情况下的标准是什么?我是否应该编写安装脚本以在目标计算机上安装库依赖项?还有我不知道的另一种方法吗?我从未发布过适用于Linux(非Windows)的应用程序,而且我一直在努力寻找资源以“正确的方式”做事。
我不确定您对pkg-config
有多熟悉,但是sdl2
的输出是这个:
-D_REENTRANT -I/usr/include/SDL2 -lSDL2
这是从运行此命令发现的:
pkg-config --cflags --libs sdl2
基本上,您需要指向SDL2所在的位置BEFORE您实际链接到它的位置。
工具pkg-config
旨在告诉您想要链接到Linux中的软件包时所需的信息。您正在与库链接,但是却忘记告诉GCC
库所在的位置。
如果要编译代码,请尝试以下操作:
g++ main.cpp -o runme `pkg-config --cflags --libs sdl2`
这将自动获取包含SDL2时需要编译的所有标志。
哦,您应该注意,添加标记和图书馆时的事项!!
关于SO的问题很多,其中编译器选项的顺序导致了所有问题。不要像那些人。我建议您在SO上搜索更多信息。