CUBE SUGAR CONTAINER

技術系のこと書きます。

C: glibc のバージョンをライブラリ関数・定数から取得する

今回は glibc のバージョンをライブラリ関数と定数から取得する方法について。 結論から先に述べると gnu_get_libc_version(3) か、定数の __GLIBC____GLIBC_MINOR__ から得られる。

使った環境は次のとおり。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.3 LTS
Release:    20.04
Codename:   focal
$ uname -rm
5.4.0-92-generic aarch64
$ /lib/aarch64-linux-gnu/libc.so.6
GNU C Library (Ubuntu GLIBC 2.31-0ubuntu9.2) stable release version 2.31.
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 9.3.0.
libc ABIs: UNIQUE ABSOLUTE
For bug reporting instructions, please see:
<https://bugs.launchpad.net/ubuntu/+source/glibc/+bugs>.

もくじ

下準備

あらかじめ C のソースコードをビルドするのに必要なパッケージをインストールしておく。

$ sudo apt-get update
$ sudo apt-get -y install build-essential

ソースコード

早速だけど以下にサンプルコードを示す。 ライブラリ関数であれば gnu_get_libc_version(3) から、定数だと __GLIBC____GLIBC_MINOR__ でバージョンが得られる。 また、gnu_get_libc_release(3) にはリリース情報が入っている。

#include <stdio.h>
#include <stdlib.h>
#include <gnu/libc-version.h>

int main(int argc, char *argv[]) {
    printf("GNU libc version: %s\n", gnu_get_libc_version());
    printf("GNU libc release: %s\n", gnu_get_libc_release());
    printf("GNU libc version (constant): %d.%d\n", __GLIBC__, __GLIBC_MINOR__);
    return EXIT_SUCCESS;
}

上記に適当な名前をつけてビルドする。

$ gcc -std=c11 -Wall example.c

実行すると、次のとおりちゃんとバージョンが取得できている。

$ ./a.out 
GNU libc version: 2.31
GNU libc release: stable
GNU libc version (constant): 2.31

いじょう。