내 시스템에 설치된 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