首页 > 解决方案 > 在其他系统上找不到共享库

问题描述

我正在 ubuntu 上编译游戏(安装了库 glfw glew sfml)并且游戏运行正常,但是当我将可执行文件复制到其他 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)

标签: c++

解决方案


您正在动态链接到您使用的库。这意味着当您编译程序时,编译器不会将您调用的 glfw、glew 或 sfml 函数的代码插入到二进制文件中。相反,当您运行程序时,将在适当的动态库中查找这些函数。

这意味着动态库“libsfml-audio.so.2.4”、“libGLEW.so.2.0”和“libglfw.so.3”必须安装在运行程序的计算机上以及编译程序的计算机。

如果您不想在运行程序的计算机上安装您使用的库,或者它们在该计算机上不可用,那么您需要静态链接这些库。这样,编译器会将您调用的库函数的所有代码复制到二进制文件中,并且它可以在没有动态库的情况下运行。这将在一定程度上增加二进制文件的大小,并且某些库(如 GNU C 标准库)要么无法静态链接,要么无法正常工作。出于这个原因,在您希望它能够运行的最旧的发行版上构建您的程序通常是一个好主意。

或者,您可以将您的程序作为源代码分发,并让用户自己为他们的系统编译它。


推荐阅读