构建可在 libc >= 2.31 的系统上运行的 Linux c++ 应用程序

Build a Linux c++ application runnable on system having libc >= 2.31

我想构建一个 C++ 应用程序,它可以在所有具有 libc >= 2.31 的 Linux 系统上启动。在我的构建系统 (Ubuntu) 上,我有 libc 2.34。 这是我的(空)申请:

int main() {
  return 0;
}

我用 g++ -o app app.cpp 构建了它,根据以下结果,我了解到我的应用程序需要 libc >= 2.34 到 运行。我的理解正确吗?

$ nm -D app
                 w __cxa_finalize@GLIBC_2.2.5
                 w __gmon_start__
                 w _ITM_deregisterTMCloneTable
                 w _ITM_registerTMCloneTable
                 U __libc_start_main@GLIBC_2.34

如何为 libc <= 2.31 构建我的应用程序?我试图在我的主要方法之前添加“__asm__ (".symver __libc_start_main, __libc_start_main@GLIBC_2.2.5");”(基于我对 this post 的理解),但它没有改变任何东西。

Docker 图像 ubuntu:20.04 已安装 libc 2:31。您可以在那里编译您的应用程序:

$ docker run --rm -v $PWD:/work -w /work ubuntu:20.04 bash -c 'apt-get update && apt-get -y install g++ && g++ -o app app.cpp'
$ docker run --rm -v $PWD:/work -w /work ubuntu:20.04 ./app
$ ./app
$ nm -D app
             w _ITM_deregisterTMCloneTable
             w _ITM_registerTMCloneTable
             w __cxa_finalize@GLIBC_2.2.5
             w __gmon_start__
             U __libc_start_main@GLIBC_2.2.5

您可以link您的应用程序静态,删除对标准库的所有依赖。

您可以将您的应用程序与 libc 库一起分发。