我在当前最新的 Fedora 发行版上构建了最简单的程序(35):
$ cat test.c
int main(int argc, char **argv)
{
}
$ cc test.c
生成的a.out无法在旧系统上运行,因为fedora 35上的glibc是2.34:
$ readelf --dyn-sym a.out
Symbol table '.dynsym' contains 3 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_start_main@GLIBC_2.34 (2)
2: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__
例如,在 Ubuntu 20 上我收到此错误:
$ ./a.out
./a.out: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./a.out)
如何在较新的 Linux 上构建可以在较旧的 Linux 上运行的程序?
我找不到任何简单的解决方案。有一个复杂的,但没有什么简单的。
如何在较新的 Linux 上构建可以在较旧的 Linux 上运行的程序?
请参阅此答案(位于底部)以获取可能的解决方案。