今回は 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
いじょう。