如何构建一个程序以在具有较旧 libc 的系统上运行?

问题描述 投票:0回答:1

我在当前最新的 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 gcc glibc
1个回答
0
投票

如何在较新的 Linux 上构建可以在较旧的 Linux 上运行的程序?

请参阅此答案(位于底部)以获取可能的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.