【问题标题】:Linking to SFML libraries without libsfml-dev在没有 libsfml-dev 的情况下链接到 SFML 库
【发布时间】:2015-08-31 12:48:41
【问题描述】:

我目前的其他链接器选项如下:

不幸的是,这意味着我只能在安装libsfml-dev 时运行可执行文件,这对于游戏开发来说是不可取的。每当我更改其他链接器选项或搜索目录>链接器时,都会导致以下错误: error while loading shared libraries: libsfml-graphics.so.2.2.0: cannot open shared object file: No such file or directory。我认为发生此错误是因为库是相对的,因此它是完全可移植的。

编辑:

我正在使用 Code::Blocks(如图所示),我想知道如何相对链接到库。当它从 Code::Blocks 运行时,它们链接得很好,但是当我运行可执行文件时,我得到了上述错误。我当前的 Code::Blocks 选项是:

链接器选项:

(其他链接器选项为空)

搜索目录:

【问题讨论】:

  • 这意味着我只能在安装 libsfml-dev 后才能运行可执行文件 -> 这就是所谓的依赖项,这没什么问题,尤其是在带有它们的 *nix 系统上包管理器。

标签: c++ linux sfml


【解决方案1】:

您的第一个链接器选项将是正确的。 库libsfml-dev 仅在编译机器上是必需的。

还必须有另一个实际提供 .so 文件的包。除非您将这些 .so 文件与可执行文件打包在一起,否则在运行可执行文件的机器上也需要该文件。在这种情况下,您可能需要一个脚本,将 LD_LIBRARY_PATH 设置为包含打包的 .so 文件的本地目录,然后执行您的程序。

【讨论】:

  • 如何更改LD_LIBRARY_PATH
  • 另外,我希望能够移动游戏所在的文件夹,但您的回答推断我有一个安装脚本可以更改LD_LIBRARY_PATH,除非我可以运行使用 C++ 编写的脚本,在我收到链接器错误之前(可能是不可能的)
  • 您可以在 shell 脚本中使用export 命令设置LD_LIBRARY_PATH。您必须通过此脚本运行您的 exe。您可以设置脚本/exe所在目录的路径。脚本可以动态执行此操作,因此您不必对路径进行硬编码。
  • 啊,我明白了,我以前从未做过 shell 脚本,但我会试试的
  • 我制作了 bash 脚本,考虑到它所做的只是获取当前目录并设置 LD_LIBRARY_PATH目录中的该死空格),这花了我太长时间,但它可以工作完美!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
  • 2012-10-05
  • 2013-11-04
  • 2013-11-07
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多