Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在其他系统上找不到共享库_C++ - Fatal编程技术网

C++ 在其他系统上找不到共享库

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)

我在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)

您正在动态链接到您使用的库。这意味着在编译程序时,编译器不会将调用的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库。普通的应该可以。你安装了正确版本的库吗?