Как я могу получить версию из библиотеки, например libSDL2-image.so.0

Вам потребуется dummy_hcdфиктивный (петлевой )хост-контроллер. USB-драйверы гаджетов предназначены для реального USB-оборудования, а на обычных ПК этого оборудования нет. Контроллер обратной связи обеспечивает как основу для контроллера гаджета, так и хост-контроллер USB для доступа к ним. Итак:

$ sudo modprobe dummy_hcd

дает вам новый корневой концентратор

$ lsusb
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Теперь можно модпробить драйвер гаджета

$ sudo modprobe g_mass_storage file=/path/to/backing_file idVendor=0x1d6b idProduct=0x0104 iManufacturer=Myself iProduct=VirtualBlockDevice iSerialNumber=123

, и он будет отображаться в новом корневом концентраторе

.
$ lsusb
Bus 005 Device 002: ID 0525:a4a5 Netchip Technology, Inc. Pocketbook Pro 903
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Обратите внимание, что вам не нужно имитировать запоминающее устройство USB, если вас интересует только содержимое файла, вы можете подключить его напрямую (через кольцевое устройство, но это произойдет автоматически ).

1
07.08.2019, 16:55
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;
}

Соберите это с помощью-lSDL2_image(и заголовков SDL ), затем запустите его, чтобы найти версию:

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
1
27.01.2020, 23:41

Теги

Похожие вопросы