我的电脑正在运行Ubuntu 17.10并且有GTK + 3.22。
从这个环境编译时,二进制文件无法在Ubuntu 16.04下运行,因为唯一的GTK + 3.18与Ubuntu 16.04兼容。如何编译较低的GTK运行时级别?
答案 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个选择:
#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