C++ 在其他系统上找不到共享库
我在ubuntu上编译游戏(安装了liblaries glfw glew sfml),游戏运行正常,但当我将excutable复制到其他ubuntu机器并尝试运行它时,我发现错误:C++ 在其他系统上找不到共享库,c++,C++,我在ubuntu上编译游戏(安装了liblaries glfw glew sfml),游戏运行正常,但当我将excutable复制到其他ubuntu机器并尝试运行它时,我发现错误: libsfml-audio.so.2.4 => not found libGLEW.so.2.0 => not found libglfw.so.3 => not found 为什么?? (我正在使用code::blocks和gnu gcc编译器,ubuntu 18.04)
libsfml-audio.so.2.4 => not found
libGLEW.so.2.0 => not found
libglfw.so.3 => not found
为什么??
(我正在使用code::blocks和gnu gcc编译器,ubuntu 18.04)您正在动态链接到您使用的库。这意味着在编译程序时,编译器不会将调用的glfw、glew或sfml函数的代码插入二进制文件。相反,当您运行程序时,这些函数将在相应的动态库中查找 这意味着动态库“libsfml audio.so.2.4”、“libGLEW.so.2.0”和“libglfw.so.3”必须安装在运行程序的计算机以及编译程序的计算机上 如果不想在运行程序的计算机上安装所使用的库,或者这些库在该计算机上不可用,则需要静态链接这些库。这样,编译器将把您调用的库函数的所有代码复制到二进制文件中,并且它可以在不存在动态库的情况下运行。这将在一定程度上增加二进制文件的大小,有些库(如GNUC标准库)要么无法静态链接到,要么无法正常工作。出于这个原因,通常最好在您希望它能够运行的最旧发行版上构建您的程序
或者,您可以将程序作为源代码分发,并让用户自己为其系统编译。您的可执行文件在启动时通过“共享库”或.so文件加载外部代码。它们可以位于系统的任何位置,并使用各种路径规则加载。(与windows等效的是dll)
ldd
是一个unix实用程序,用于显示这些依赖项
如果存在静态(.a)版本,可以选择将这些库直接编译到代码中
另一种方法是将它们捆绑在一起。默认加载规则是在探索路径IIRC之前检查当前目录中的。因此。安装的库是否为正确版本?其他计算机上是否安装了这些库?当我安装sfml apt get install libsfml dev时,如果第二台计算机正在运行程序,而不是构建它,您不应该需要dev库。普通的应该可以。你安装了正确版本的库吗?