在编译时或运行时检查linux版本

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

我使用Linux 2.1.57中引入的函数

prctl
。 我执行以下操作:

// function 'prctl' is linux only and was introduced in  version
#ifdef __linux__
    #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,57)
        prctl(PR_SET_PDEATHSIG, SIGKILL);
    #endif
#endif

但是如果我在较低版本的 Linux 中运行我的二进制文件会发生什么? 程序会崩溃或无法加载?

我是否需要通过运行时替换编译时检查(使用

utsname()->release
)或同时使用编译和运行时检查?

c linux linux-kernel runtime compile-time
1个回答
0
投票

如果您在现代 Linux 上编译程序但尝试在较旧的 Linux 上运行它,则有 2 种可能性:

  1. 程序是动态编译的。在这种情况下,很可能它甚至不会加载 - 因为它将链接到现代 glibc 版本,而旧版 Linux 系统上不存在该版本。
  2. 程序是静态编译的(这意味着必要的 glibc 调用与您的可执行文件捆绑在一起,使其更大)。在这种情况下,它会加载,但很可能会崩溃、过早退出或只是跳过有问题的调用。

无论如何,都无法正常工作。

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