我想将我的程序作为二进制文件分发,而不是源代码形式。我有两个测试系统:一个较旧的 Linux(带有 glibc 2.10 的 openSUSE 11.2)和一个最近的(带有 glibc 2.15 的 LinuxMint 13)。现在,当我在 LinuxMint 系统上使用 glibc 2.15 编译我的程序,然后尝试在 openSUSE 系统上使用 glibc 2.10 启动二进制文件时,我收到以下两个错误:
./a.out: /lib/libc.so.6: version 'GLIBC_2.15' not found (required by ./a.out)
./a.out: /lib/libc.so.6: version 'GLIBC_2.11' not found (required by ./a.out)
这里让我感到困惑的是:为什么我也会在这里收到“glibc 2.11 not found”错误?我希望该程序现在需要 glibc 2.15,因为它是使用 glibc 2.15 编译的。为什么程序也在寻找 glibc 2.11?这是否意味着我的程序将在两个 glibc 版本(即 2.15 和 2.11)上运行?所以它至少需要2.11?还是无论如何都需要2.15?
另一个问题:glibc 向上兼容但不向下兼容的假设是否正确?例如,使用 glibc 2.10 编译的程序是否可以保证与任何未来版本的 glibc 完美配合?如果是这种情况,如果将来更改 PATH_MAX 之类的常量会怎样?目前它设置为 4096,我正在使用 PATH_MAX 常量为 realpath() POSIX 函数分配缓冲区。现在如果将来这个常数提高到 8192,可能会出现问题,因为我的程序只分配了 4096 个字节。还是我在这里误解了什么?
感谢您的解释!