не удается найти – Нет такого файла или каталога – libusb – Ubuntu 32 и 64 бит

Вопрос или проблема

Я пытаюсь написать программу, которая передает данные на мое устройство. Я использую libusb. У меня возникло много проблем с установкой этого пакета как в 32, так и в 64 битной версии Ubuntu 16 LTS. Команды для установки:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install libusb-1.0-0-dev
sudo apt-get install libusb-1.0-0-dbg

Также пробовал: http://www.linuxfromscratch.org/blfs/view/svn/general/libusb.html

Команда “dpkg -l libusb*” в 64 битной версии Ubuntu показывает, что пакет установлен, тогда как в 32 битной версии объявляется “такого пакета нет…”.

Команда компиляции:

sudo gcc -g -o usbtest usbtest.c -lusb-1.0

В 64 битной версии Ubuntu компиляция прошла успешно, а в 32 битной версии появилась следующая заметка:

/usr/bin/ld: cannot find -lusb-1.0
collect2: error: ld returned 1 exit status

Но я был уверен, что он существует, и затем я попробовал следующую команду, и она скомпилировалась без ошибок.

sudo gcc -g -o usbtest usbtest.c -L/usr/local/lib -lusb-1.0

В конце, когда я запускаю свою программу, она не может найти мое устройство, другими словами, не может открыть устройство. Далее представлена процедура отладки в Ubuntu (32 и 64 бит):

141      int r = 1; 
(gdb) s
143      r = libusb_init(NULL); 
(gdb) 
libusb_init (context=0x0) at ../../libusb/core.c:1983
1983    ../../libusb/core.c: Нет такого файла или каталога.
(gdb) 
1985    в ../../libusb/core.c
(gdb) 
__GI_getenv (name=0xb7fb2f16 "LIBUSB_DEBUG") at getenv.c:34
34  getenv.c: Нет такого файла или каталога.
(gdb) 
__x86.get_pc_thunk.bx () at ../sysdeps/i386/i686/multiarch/../memcmp.S:80
80  ../sysdeps/i386/i686/multiarch/../memcmp.S: Нет такого файла или каталога.
(gdb) 
__GI_getenv (name=0xb7fb2f16 "LIBUSB_DEBUG") at getenv.c:35
35  getenv.c: Нет такого файла или каталога.
(gdb) 
__strlen_ia32 () at ../sysdeps/i386/i686/multiarch/../../i586/strlen.S:43
43  ../sysdeps/i386/i686/multiarch/../../i586/strlen.S: Нет такого файла или каталога.
(gdb) 
44  в ../sysdeps/i386/i686/multiarch/../../i586/strlen.S

У меня нет никаких идей, что мне делать.

Я не совсем уверен, чего вы пытаетесь достичь; вам нужно, чтобы libusb работал как на 32, так и на 64 бит? Или только на одном из них? В любом случае, библиотека должна быть установлена специально для правильной архитектуры. Команда установки по умолчанию будет устанавливать только ее “собственную” версию библиотеки. Вы можете специально указать установить обе версии:

sudo apt-get install libusb-1.0-0-dev:i386
sudo apt-get install libusb-1.0-0-dev:amd64

для 32 и 64 бит соответственно. Вы также можете сразу проверить наличие файлов библиотеки, в моей системе (16.04) они находятся в

32bit: /usr/lib/i386-linux-gnu/
64bit: /usr/lib/x86_64-linux-gnu

(если вы сомневаетесь, dpkg-query -L libusb-1.0-0-dev показывает, где они установлены.)

Что касается libusb, который вы скомпилировали сами, вам нужно следить за тем, чтобы вы использовали правильную версию при линковке вашей программы. Возможно, вы смешиваете 32 и 64 битные версии в /usr/local/lib? gcc / ld тогда не будет знать, как их разделить.

Что касается сессии отладки, gdb просто пытается показать вам строки исходного кода, но не знает, где найти исходные файлы библиотеки. В остальном я не вижу ничего, что явно идет не так.

Ответ или решение

Ошибка "cannot find – No such file or directory – libusb" на Ubuntu 32 и 64 бита

Если вы сталкиваетесь с увлекательной задачей программирования с использованием libusb на Ubuntu и при этом по какой-то причине получаете ошибку о том, что библиотека не найдена, вам стоит внимательно рассмотреть несколько аспектов установки и компиляции этой библиотеки.

1. Установка libusb для разных архитектур

Действительно, для успешного выполнения программ на 32-битной и 64-битной версиях Ubuntu необходимо установить соответствующую библиотеку для каждой архитектуры. Команда apt-get по умолчанию устанавливает версию библиотеки, подходящую для вашей архитектуры, поэтому, если вам нужно обе версии, воспользуйтесь следующими командами:

sudo apt-get install libusb-1.0-0-dev:i386
sudo apt-get install libusb-1.0-0-dev:amd64

Эти команды позволят вам установить библиотеку для 32-разрядной и 64-разрядной архитектур, соответственно. После выполнения этих установок убедитесь, что библиотека установлена корректно, с помощью команды:

dpkg -l | grep libusb

2. Проверка путей библиотек

Как правило, библиотеки libusb находятся в следующих директориях:

  • Для 32-битной версии: /usr/lib/i386-linux-gnu/
  • Для 64-битной версии: /usr/lib/x86_64-linux-gnu/

Если вы хотите убедиться, где именно установлены файлы, используйте команду:

dpkg-query -L libusb-1.0-0-dev

3. Компиляция программ

При компиляции вашего приложения рекомендуется указывать прямой путь к библиотекам, чтобы избежать путаницы между версиями. Ваш компилятор может не находить 32-битную библиотеку, если она не находится в стандартных путях. Попробуйте явно указать задействованные директории при компиляции:

sudo gcc -g -o usbtest usbtest.c -L/usr/lib/i386-linux-gnu -lusb-1.0

4. Проверка установленной библиотеки

При проверке наличия библиотеки необходимо убедиться, что версии библиотек, используемые при программировании и компиляции, совпадают. Иногда можно случайно смешивать 32-битные и 64-битные версии, что приведет к ошибкам компиляции или при запуске программы.

5. Ошибки во время отладки

Ошибки, которые вы видите при запуске gdb, могут свидетельствовать о том, что отладчик не может найти исходные файлы библиотеки. Это нормальное поведение, поскольку gdb пытается обратиться к исходному коду в папках библиотеки, где эти файлы могут быть отсутствуют. Ошибка "No such file or directory" не всегда указывает на наличие проблемы в вашем коде, а скорее всего, это связано с отсутствием исходников на вашей системе.

Чтобы улучшить отладку, вы можете установить исходники libusb, которые могут вам понадобиться для решения подобного рода задач:

sudo apt-get install libusb-1.0-0-doc

Заключение

Работа с библиотеками, такими как libusb, может быть сложной, особенно при учете различных архитектур системы. Важно понимать, какая версия библиотеки нужна для вашего окружения, а также корректно указывать пути во время компиляции. Если следовать приведенным шагам и рекомендациям, вы сможете минимизировать риски помилок и добиться желаемого результата. Если проблема сохраняется, рассмотрите возможность получения помощи в сообществах разработчиков или на форумах, посвященных Ubuntu.

Оцените материал
Добавить комментарий

Капча загружается...