【问题标题】:Does GTK+ have runtime dependencyGTK+ 是否有运行时依赖
【发布时间】:2015-04-19 11:37:15
【问题描述】:

我正在尝试遵循 GTK+ hello world 教程here。我将代码编译为可执行文件并尝试运行它。然后我收到一个错误,说无法加载特定的包。我安装了软件包并运行了可执行文件。现在,可执行文件按预期完美运行。这是否意味着 GTK+ 对这些模块具有运行时依赖关系?

那么,运行我的可执行文件的系统应该安装 GTK+ 吗?

我的可执行文件不能是独立程序吗?

【问题讨论】:

  • Can't my executable be a standalone program? 静态链接。

标签: c user-interface gtk


【解决方案1】:

在现代系统中,几乎所有程序都有“依赖关系”。这些库通过与其他可执行文件共享部分来帮助缩小可执行文件。即使是一个小的测试 C 程序也需要 C 库来执行。做一个

ldd <your executable>

查看可执行文件所依赖的库列表。

有一种方法可以避免这种情况 - 通过静态链接。在这种情况下,所有依赖项都将包含在可执行文件中。但是您可能必须安装库的静态版本才能到达那里,并且您将拥有巨大的可执行文件。 (请注意,这是一个稍微简化的解释)

还请注意,对 gtk-dev 或 gtk-devel 包的请求不是运行时依赖项。

【讨论】:

    【解决方案2】:

    GTK+ 是一个库,这意味着您需要将库的共享对象与您的可执行文件一起提供。 GTK+ 本身有它自己的依赖项,这意味着您有一组库需要随可执行文件一起提供——除非您知道目标平台有 GTK+ 并且它的依赖项已经可用。 Linux 上的大多数应用程序都基于此假设工作,而其他平台(如 Windows 和 MacOS)则不能。

    可以选择将二进制文件与 GTK+ 静态链接,但 GTK+ 及其一些依赖项可能仍具有运行时可加载模块,需要与二进制文件一起提供。静态链接选项也没有经过很好的测试。

    最好使用一组依赖项构建您的应用程序,然后使用安装程序或作为存档发布整个内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-07
      • 1970-01-01
      • 1970-01-01
      • 2021-09-20
      • 2013-05-23
      • 1970-01-01
      相关资源
      最近更新 更多