【发布时间】:2012-09-22 10:37:44
【问题描述】:
我想以二进制文件的形式分发我的程序,而不是源代码形式。我有两个测试系统:一个较旧的 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 个字节。还是我在这里误会了什么?
感谢您的解释!
【问题讨论】:
-
尝试静态链接您的代码:
gcc -static mycode.c... -
另外:你的问题太多了。如果您只发布一个明确的问题,您将获得更好的答案。
-
@DouglasB.Staple:如果你这样做,你必须分发资源!!!
-
@DouglasB.Staple:这不是一个选项,因为那样我的程序将属于 GPL。
标签: c linux gcc glibc shared-libraries