在另一台电脑上执行程序时加载 SDL2 共享库时出错
Error loading SDL2 shared libraries while executing program on another pc
我正在尝试编译我使用 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 安装上工作;我已经交叉编译(使用 mingw32)并在 Windows 上测试它(使用新安装的 VM),添加正确的 dll 和 exe(似乎工作正常),我期待它在类似的环境中工作时尚
这种情况下的标准是什么?我应该编写安装脚本来在目标机器上安装库依赖项吗?还有其他我不知道的方法吗?我从未发布过 Linux(也没有 Windows)的应用程序,我正在努力寻找资源来做事 "the right way"。
我不确定您对 pkg-config
有多熟悉,但是 sdl2
的输出是这样的:
-D_REENTRANT -I/usr/include/SDL2 -lSDL2
这是从 运行 找到的:
pkg-config --cflags --libs sdl2
基本上,您需要指向 SDL2 所在的位置 ,然后 您实际上 link 它。
工具 pkg-config
旨在告诉您在 link 到 Linux 中的包时需要的信息。您 link 与图书馆交流,但您忘记告诉 GCC
图书馆的位置。
如果你想编译你的代码,试试这个:
g++ main.cpp -o runme `pkg-config --cflags --libs sdl2`
这将自动获取您需要使用包含的 SDL2 进行编译的所有标志。
哦,你应该注意,添加标志和库时顺序很重要!!!
关于 SO 的问题很多,其中编译器选项的顺序导致了所有问题。不要像那些人一样。我建议您搜索 SO 以获取更多信息。
感谢大家的建议,我最终选择了简单的方法,动态编译 "easy to install" 库,例如 -lSDL2
和其他静态库(检查了许可证,应该没问题),就像这样:
g++ main.cpp -o main -Wl,-Bdynamic -lSDL2 -lSDL2_image -lSDL2_ttf -Wl,-Bstatic -lSDL2_gfx -static-libgcc -static-libstdc++
我会在文档中说明如何安装所需的 SDL2 库。
我正在尝试编译我使用 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 安装上工作;我已经交叉编译(使用 mingw32)并在 Windows 上测试它(使用新安装的 VM),添加正确的 dll 和 exe(似乎工作正常),我期待它在类似的环境中工作时尚
这种情况下的标准是什么?我应该编写安装脚本来在目标机器上安装库依赖项吗?还有其他我不知道的方法吗?我从未发布过 Linux(也没有 Windows)的应用程序,我正在努力寻找资源来做事 "the right way"。
我不确定您对 pkg-config
有多熟悉,但是 sdl2
的输出是这样的:
-D_REENTRANT -I/usr/include/SDL2 -lSDL2
这是从 运行 找到的:
pkg-config --cflags --libs sdl2
基本上,您需要指向 SDL2 所在的位置 ,然后 您实际上 link 它。
工具 pkg-config
旨在告诉您在 link 到 Linux 中的包时需要的信息。您 link 与图书馆交流,但您忘记告诉 GCC
图书馆的位置。
如果你想编译你的代码,试试这个:
g++ main.cpp -o runme `pkg-config --cflags --libs sdl2`
这将自动获取您需要使用包含的 SDL2 进行编译的所有标志。
哦,你应该注意,添加标志和库时顺序很重要!!!
关于 SO 的问题很多,其中编译器选项的顺序导致了所有问题。不要像那些人一样。我建议您搜索 SO 以获取更多信息。
感谢大家的建议,我最终选择了简单的方法,动态编译 "easy to install" 库,例如 -lSDL2
和其他静态库(检查了许可证,应该没问题),就像这样:
g++ main.cpp -o main -Wl,-Bdynamic -lSDL2 -lSDL2_image -lSDL2_ttf -Wl,-Bstatic -lSDL2_gfx -static-libgcc -static-libstdc++
我会在文档中说明如何安装所需的 SDL2 库。