我正在尝试遵循GTK + hello world教程here。我将代码编译为可执行文件并尝试运行它。然后我得到一个错误,说无法加载特定的包。我安装了包并运行了可执行文件。现在,可执行文件按预期运行完美。这是否意味着GTK +对这些模块具有运行时依赖性?
那么,运行我的可执行文件的系统是否应该安装GTK +?
我的可执行文件不能是一个独立的程序吗?
答案 0 :(得分:1)
在现代系统中,几乎所有程序都具有“依赖性”。这些库通过与其他可执行文件共享部件来帮助减少可执行文件。即使是小型测试C程序也需要C库来执行。做一个
ldd <your executable>
查看可执行文件所依赖的库列表。
有一种方法可以避免这种情况 - 通过静态链接。在这种情况下,所有依赖项都将包含在可执行文件中。但是您可能必须安装库的静态版本才能到达那里,并且您将拥有巨大的可执行文件。 (请注意,这是一个有点简化的解释)
另请注意,对gtk-dev或gtk-devel包的请求不是运行时依赖项。
答案 1 :(得分:1)
GTK +是一个库,这意味着您需要将库的共享对象与可执行文件一起发送。 GTK +本身具有自己的依赖关系,这意味着您需要随可执行文件一起提供一组库 - 除非您知道目标平台具有GTK +并且其依赖关系已经可用。 Linux上的大多数应用程序都是基于这种假设,而其他平台,如Windows和MacOS则不能。
可以选择将二进制文件与GTK +静态链接,但GTK +及其某些依赖项可能仍然具有运行时可加载模块,需要与二进制文件一起发送。静态链接选项也没有经过充分测试。
最好使用一组依赖项构建应用程序,然后使用安装程序或作为存档发送整个应用程序。