ライブラリ(libSDL2-image.so.0など)からバージョンを取得する方法

ライブラリ(libSDL2-image.so.0など)からバージョンを取得する方法

私のシステムにインストールされているSDL2-Imageのバージョンを確認する方法を見つけようとしていますが、bashスクリプトに役立つものが見つかりませんでした。 「2.0.1」のようなバージョンを見つけるために、次のコマンドを試しました。

希望の出力:

2.0.1

スクリプト:

#Variables
SDL2IDir=$(whereis libSDL2_image-2.0.so.0 | cut -d " " -f02 | cut -c1-8)
SDL2I=$(whereis libSDL2_image-2.0.so.0 | cut -d " " -f02)
SDL2I=$(ls -la "$SDL2I" | cut -d " " -f11)
SDL2I=$(echo "$SDL2IDir/$SDL2I")

#GatheringInfomation
file "$SDL2I"
/usr/lib/libSDL2_image-2.0.so.0.2.3: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=fcba461f120fe345054f141b8286077e5c1bdf3c, not stripped


$ strings "$SDL2I"
Jd}zRV
xk)N
8YFL
__gmon_start__
_init
_fini
_ITM_deregisterTMCloneTable
_ITM_registerTMCloneTable
__cxa_finalize
_Jv_RegisterClasses
IMG_Linked_Version
IMG_Init
IMG_InitJPG
IMG_InitPNG
IMG_InitTIF
IMG_InitWEBP
IMG_Quit
IMG_QuitWEBP
IMG_QuitTIF
IMG_QuitPNG
IMG_QuitJPG
IMG_LoadTyped_RW
SDL_RWseek
SDL_toupper
SDL_SetError
SDL_RWclose
IMG_Load
SDL_RWFromFile
SDL_strrchr
IMG_Load_RW
IMG_LoadTexture
SDL_CreateTextureFromSurface
SDL_FreeSurface
IMG_LoadTexture_RW
IMG_LoadTextureTyped_RW
IMG_LoadTGA_RW
IMG_isCUR
IMG_LoadCUR_RW
IMG_isICO
IMG_LoadICO_RW
IMG_isBMP
IMG_LoadBMP_RW
IMG_isGIF
IMG_LoadGIF_RW
IMG_isJPG
IMG_LoadJPG_RW
IMG_isLBM
IMG_LoadLBM_RW
IMG_isPCX
IMG_LoadPCX_RW
IMG_isPNG
IMG_LoadPNG_RW
IMG_isPNM
IMG_LoadPNM_RW
IMG_isSVG
IMG_LoadSVG_RW
IMG_isTIF
IMG_LoadTIF_RW
IMG_isXCF
IMG_LoadXCF_RW
IMG_isXPM
IMG_LoadXPM_RW
IMG_isXV
IMG_LoadXV_RW
IMG_isWEBP
IMG_LoadWEBP_RW
SDL_RWtell
SDL_ReadLE16
SDL_ClearError
SDL_RWread
SDL_ReadLE32
SDL_Error
SDL_GetError
SDL_strcmp
SDL_CreateRGBSurface
SDL_strncmp
SDL_memcmp
SDL_memcpy
SDL_SetColorKey
SDL_snprintf
longjmp
SDL_ConvertSurfaceFormat
SDL_RWwrite
SDL_LoadObject
SDL_LoadFunction
SDL_UnloadObject
_setjmp
IMG_SaveJPG_RW
IMG_SaveJPG
SDL_memset
SDL_malloc
SDL_free
SDL_calloc
SDL_realloc
SDL_MapRGB
IMG_SavePNG_RW
IMG_SavePNG
SDL_isspace
SDL_isdigit
SDL_strchr
SDL_strlen
nsvg__colors
SDL_sscanf
SDL_sqrtf
SDL_strtoll
SDL_pow
SDL_strtol
SDL_acosf
SDL_fabs
SDL_sqrt
SDL_cosf
SDL_sinf
SDL_floorf
SDL_tanf
SDL_fabsf
SDL_strlcpy
SDL_strstr
SDL_ceilf
SDL_atan2f
nsvg__parseXML
nsvgDelete
nsvgParse
nsvgDeleteRasterizer
nsvgCreateRasterizer
nsvgRasterize
SDL_qsort
SDL_fmodf
SDL_LoadFile_RW
SDL_ReadBE32
SDL_RWsize
SDL_Log
SDL_UpperBlit
SDL_FillRect
SDL_strncasecmp
IMG_ReadXPMFromArray
libSDL2-2.0.so.0
libm.so.6
libdl.so.2
libpthread.so.0
librt.so.1
libc.so.6
_edata
__bss_start
_end
libSDL2_image-2.0.so.0
/usr/lib
GLIBC_2.2.5
AWAVAUE1

not enough memory for temporary buffer
unsupported PCX format
file truncated
decoding out of bounds (corrupt?)
1.6.28
Error writing the PNG file.
libpng16.so.16
png_create_info_struct
png_create_read_struct
png_destroy_read_struct
png_get_IHDR
png_get_io_ptr
png_get_channels
png_get_PLTE
png_get_tRNS
png_get_valid
png_read_image
png_read_info
png_read_update_info
png_set_expand
png_set_gray_to_rgb
png_set_packing
png_set_read_fn
png_set_strip_16
png_set_interlace_handling
png_sig_cmp
png_set_longjmp_fn
png_create_write_struct
png_destroy_write_struct
png_set_write_fn
png_set_IHDR
png_write_info
png_set_rows
png_write_png
png_set_PLTE
Error reading the PNG file.
Couldn't allocate memory for PNG file or incompatible PNG dll
Couldn't create image information for PNG file
Couldn't create palette for PNG file
Failed to convert and save image
IEND
QkkXa


unsupported PNM format
Unable to read image width and height
%d%[%%,     ]%d%[%%,    ]%d
%f%31s
path
defs
.symtab
.strtab
.shstrtab
.note.gnu.build-id
.gnu.hash
.dynsym
.dynstr
.gnu.version
.gnu.version_r
.rela.dyn
.rela.plt
.init
.plt.got
.text
.fini
.rodata
.eh_frame_hdr
.eh_frame
.init_array
.fini_array
.jcr
.data.rel.ro
.dynamic
.got.plt
.data
.bss
.comment

readelf -sV "$SDL2I"
readelf -d "$SDL2I"

readelf -d "$SDL2I" |grep SONAME
 0x000000000000000e (SONAME)             Nombre-so de la biblioteca: [libSDL2_image-2.0.so.0]

ldconfig -v | grep "$SDL2I"
ldconfig: No se puede efectuar `stat' sobre /lib/i686-linux-gnu: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/lib/i686-linux-gnu: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /opt/trinity/lib: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /opt/trinity/lib64: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /opt/trinity/lib/trinity: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /opt/trinity/lib64/trinity: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /lib32: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /libx32: No existe el fichero o el directorio
ldconfig: Se ha dado la ruta `/lib/x86_64-linux-gnu' más de una vez
ldconfig: Se ha dado la ruta `/usr/lib/x86_64-linux-gnu' más de una vez
ldconfig: /lib/i386-linux-gnu/ld-2.24.so is the dynamic linker, ignoring

ldconfig: /lib/x86_64-linux-gnu/ld-2.24.so is the dynamic linker, ignoring

ldconfig: /usr/lib/x86_64-linux-gnu/libschroedinger-1.0.so.0 no es un enlace simbólico

ldconfig: /usr/lib/x86_64-linux-gnu/libnettle.so.4 no es un enlace simbólico

ldconfig: /usr/lib/x86_64-linux-gnu/libhogweed.so.2 no es un enlace simbólico

ldconfig: /usr/lib/x86_64-linux-gnu/libgnutls-deb0.so.28 no es un enlace simbólico

ldconfig: /usr/lib/x86_64-linux-gnu/libgif.so.4 no es un enlace simbólico

ldconfig: /usr/lib/x86_64-linux-gnu/libavresample.so.2 no es un enlace simbólico

ldconfig: /usr/lib/x86_64-linux-gnu/libavformat.so.56 no es un enlace simbólico

ldconfig: /usr/lib/x86_64-linux-gnu/libavcodec.so.56 no es un enlace simbólico

ldconfig: No se puede efectuar `stat' sobre /usr/lib32/libBrokenLocale.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/lib32/libanl.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/lib32/libcidn.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/lib32/libcrypt.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/lib32/libdl.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/lib32/libm.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/lib32/libnsl.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/lib32/libnss_compat.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/lib32/libnss_dns.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/lib32/libnss_files.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/lib32/libnss_hesiod.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/lib32/libnss_nis.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/lib32/libnss_nisplus.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/lib32/libresolv.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/lib32/librt.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/lib32/libthread_db.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/lib32/libutil.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/libx32/libBrokenLocale.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/libx32/libanl.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/libx32/libcidn.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/libx32/libcrypt.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/libx32/libdl.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/libx32/libmvec.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/libx32/libnsl.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/libx32/libnss_compat.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/libx32/libnss_dns.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/libx32/libnss_files.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/libx32/libnss_hesiod.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/libx32/libnss_nis.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/libx32/libnss_nisplus.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/libx32/libresolv.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/libx32/librt.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/libx32/libthread_db.so: No existe el fichero o el directorio
ldconfig: No se puede efectuar `stat' sobre /usr/libx32/libutil.so: No existe el fichero o el directorio

ldd "$SDL2I"
    linux-vdso.so.1 (0x00007ffd905b1000)
    libSDL2-2.0.so.0 => /usr/lib/libSDL2-2.0.so.0 (0x00007fbcc1b97000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fbcc1893000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fbcc168f000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fbcc1472000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fbcc126a000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fbcc0ecb000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fbcc2153000)

(長さのため出力が切れる)

ベストアンサー1

残念ながら、すべての場合に適用できる一律のアプローチはありません。

よく管理されたライブラリでは、sonameはABIベースラインとして機能します。つまり以前のバージョンとの互換性を示すインジケータです。 SDLイメージの場合は、次のコマンドを使用してイメージを検索できますreadelf

$ readelf -d /usr/lib/x86_64-linux-gnu/libSDL2_image-2.0.so | grep SONAME
 0x000000000000000e (SONAME)             Library soname: [libSDL2_image-2.0.so.0]

ただし、これはパッチされたバージョンを提供しません。私が知っている限り、これを確認する唯一の方法は、IMG_Linked_Versionライブラリから関数を呼び出すことです。

#include <stdio.h>
#include <SDL2/SDL_image.h>

int main(int argc, char **argv) {
        const SDL_version *version = IMG_Linked_Version();
        printf("Running with SDL_image version %d.%d.%d\n",
                version->major, version->minor, version->patch);
        return 0;
}

(およびSDLヘッダ)を使用してビルドし、実行して-lSDL2_imageバージョンを見つけます。

Running with SDL_image version 2.0.4

一部のライブラリは、GNU Cライブラリの場合はパッチ情報を必ずしも含まないわけではありませんが、使用できるバージョンシンボルを定義します。

$ nm -D /lib/x86_64-linux-gnu/libc-2.28.so | awk '/GLIBC_/ { print $3 }' | sort -V
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_2.18
GLIBC_2.22
GLIBC_2.23
GLIBC_2.24
GLIBC_2.25
GLIBC_2.26
GLIBC_2.27
GLIBC_2.28
GLIBC_PRIVATE

おすすめ記事