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

时间:2014-04-23 08:11:59

标签: c linux linux-kernel runtime compile-time

我使用的功能' prctl'这是在Linux 2.1.57中引入的。 我做了以下事情:

    ...
        // 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) 或使用编译和运行时检查

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

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

  1. 程序是动态编译的。在这种情况下,很可能它甚至不会加载 - 因为它将链接到现代的glibc版本,这在旧的Linux系统上是不存在的。
  2. 程序是静态编译的(意味着必要的glibc调用与您的可执行文件捆绑在一起,使其更大)。在这种情况下,它会加载,但很可能是崩溃,过早退出或者只是跳过违规通话。
  3. 无论如何,它将无法正常工作。