Вам потребуется 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, если вас интересует только содержимое файла, вы можете подключить его напрямую (через кольцевое устройство, но это произойдет автоматически ).
К сожалению, не существует универсального подхода, который будет работать во всех случаях.
В хорошо -обслуживаемых библиотеках 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