Vala:编译较低的GTK版本

时间:2018-03-22 17:02:23

标签: gtk gtk3 vala

我的电脑正在运行Ubuntu 17.10并且有GTK + 3.22。

从这个环境编译时,二进制文件无法在Ubuntu 16.04下运行,因为唯一的GTK + 3.18与Ubuntu 16.04兼容。如何编译较低的GTK运行时级别?

2 个答案:

答案 0 :(得分:2)

反过来应该工作。

在较旧的操作系统版本上编译二进制文件,它应该在较新的操作系统上正常工作。

通常的解决方案是根本不提供二进制文件,但让用户和分发开发人员/打包者处理问题。

确保您的应用程序易于编译,这意味着使用标准构建系统工具,如mesonbuild,并在README.md文件中添加一些构建指令。

答案 1 :(得分:2)

这取决于您对GTK + API的真正依赖性。

每个函数在其文档的末尾都有一个Since:字段,用于说明它首次出现的GTK +版本。您的两个目标版本都是GTK + 3,因此它们与ABI兼容。因此,当您在3.18上运行为3.22编译的二进制文件时,您只需要检查哪些符号未找到。在3.18之后添加了未找到的每个符号。每个带有Since:>的符号3.18无法使用,您需要使用最小的公分母。一旦符号> 3.18被识别出来,你有2个选择:

  • 要么以3.18方式执行,要么将代码更改为在3.18之后不使用符号。这意味着您可能必须使用已弃用的符号,但它们将在下一个API中断之前(即GTK + 4)。
  • 或尝试使用以下内容获取两个版本的最新功能:

#if GTK_CHECK_VERSION(3, 20, 0)
    // Do it the GTK+ >= 3.20 way
#else
    // Do it the GTK 3.18 way
    // (and ensure you have checks in your configure.ac or similar to make
    // sure configuration breaks if trying to build with a GTK+ < 3.18)
#endif