Фатальная ошибка: libusb/libusb.h: нет такого файла или каталога librtlsdr install for GNU Radio

Пытаюсь установить rtl-sdr (через git clone git://git.osmocom.org/rtl-sdr.git) благодаря инструкции здесь но не могу пройти дальше make в первой последовательности инструкций:

cd rtl-sdr/
mkdir build
cd build
cmake ../
make

При первой попытке я получил следующую ошибку:

/rtl-sdr/src/librtlsdr.c:30:10: fatal error: libusb.h: No such file or directory

После нахождения этого файла:

/usr/include$ sudo locate libusb.h
/usr/include/libusb-1.0/libusb.h

Я попытался заменить оригинальный #include <libusb.h> на #include <libusb-1.0/libusb.h> (как было предложено здесь и здесь), что привело к другому сбою:

/rtl-sdr/build$ make
[  6%] Built target convenience_static
Scanning dependencies of target rtlsdr
[  9%] Building C object src/CMakeFiles/rtlsdr.dir/librtlsdr.c.o
[ 12%] Linking C shared library librtlsdr.so
[ 28%] Built target rtlsdr
[ 31%] Linking C executable rtl_test
librtlsdr.so.0.6git: undefined reference to `libusb_open'
librtlsdr.so.0.6git: undefined reference to `libusb_release_interface'
librtlsdr.so.0.6git: undefined reference to `libusb_close'
librtlsdr.so.0.6git: undefined reference to `libusb_get_string_descriptor_ascii'
librtlsdr.so.0.6git: undefined reference to `libusb_get_device_list'
librtlsdr.so.0.6git: undefined reference to `libusb_kernel_driver_active'
librtlsdr.so.0.6git: undefined reference to `libusb_alloc_transfer'
librtlsdr.so.0.6git: undefined reference to `libusb_bulk_transfer'
librtlsdr.so.0.6git: undefined reference to `libusb_reset_device'
librtlsdr.so.0.6git: undefined reference to `libusb_handle_events_timeout'
librtlsdr.so.0.6git: undefined reference to `libusb_get_device'
librtlsdr.so.0.6git: undefined reference to `libusb_exit'
librtlsdr.so.0.6git: undefined reference to `libusb_free_transfer'
librtlsdr.so.0.6git: undefined reference to `libusb_init'
librtlsdr.so.0.6git: undefined reference to `libusb_get_device_descriptor'
librtlsdr.so.0.6git: undefined reference to `libusb_free_device_list'
librtlsdr.so.0.6git: undefined reference to `libusb_claim_interface'
librtlsdr.so.0.6git: undefined reference to `libusb_control_transfer'
librtlsdr.so.0.6git: undefined reference to `libusb_submit_transfer'
librtlsdr.so.0.6git: undefined reference to `libusb_dev_mem_free'
librtlsdr.so.0.6git: undefined reference to `libusb_cancel_transfer'
collect2: error: ld returned 1 exit status
src/CMakeFiles/rtl_test.dir/build.make:96: recipe for target 'src/rtl_test' failed
make[2]: *** [src/rtl_test] Error 1
CMakeFiles/Makefile2:138: recipe for target 'src/CMakeFiles/rtl_test.dir/all' failed
make[1]: *** [src/CMakeFiles/rtl_test.dir/all] Error 2
Makefile:129: recipe for target 'all' failed
make: *** [all] Error 2

Обратите внимание, что это предложение, по-видимому, связано с опцией / ссылкой компиляции gcc --cflags libusb-1.0 или -lusb-1.0 (см. здесь и здесь), которую я не знаю, где найти (поскольку я использую make, не будучи привык к этому).

Я также попытался заменить оригинальный #include <libusb.h> на #include <usb.h> (как видно здесь), что привело к:

/rtl-sdr/src/librtlsdr.c:97:2: error: unknown type name ‘libusb_context’

К вашему сведению libusb-1.0-0-dev и libusb-dev уже установлены (как было предложено здесь, я пробовал, хотя, думаю, он уже был установлен...):

/usr/include$ sudo apt install libusb-1.0-0-dev
libusb-1.0-0-dev is already the newest version (2:1.0.21-2).

~$ sudo apt install libusb-dev
libusb-dev is already the newest version (2:0.1.12-31).

И уже установил rtl-sdr с помощью apt:

sudo apt-get install rtl-sdr
rtl-sdr is already the newest version (0.5.3-13).

О моей системе: Linux версии 5.4.0-58-общая версия gcc 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04). Эта установка направлена ​​​​на то, чтобы можно было использовать ключ DVB-T с GNU Radio, для чего требуется эта rtl-sdr установка.

Обновлено: после ответа @Tsyvarev

  1. установлен pkg-config с sudo apt install pkg-config
  2. удален первый репозиторий, полученный из исходного git clone, новый чистый git clone, новый /build и т. д., а затем make, который сработал!

Удаление старого клона репозитория и повторное создание чистого /build было необходимо, так как попытка запустить make в старом /build даже после установки pkg-config не сработала. Обратите внимание, что это означает, что в строке кода #include <libusb.h> в src/librtlsdr.c не требуется никаких изменений.

В качестве примечания для тех из вас, кто оказался здесь, потому что пытается установить блок «RTL-SDR Source» для GNU Radio, я подозреваю, что моя проблема на самом деле была в том, что я не установил gr-osmosdr с sudo apt install gr-osmosdr после установки rtl-sdr с простым sudo apt-get install rtl-sdr.

Согласно CMakeLists.txt проекта, ожидается, что либо libusb будет найден с помощью pkg-config, либо, если pkg-config недоступен, параметры libusb должны быть заполнены вручную: LIBUSB_INCLUDE_DIRS должен быть установлен для включения каталога (/usr/include/libusb-1.0 в вашем случае) и LIBUSB_LIBRARIES должна быть установлена ​​библиотека libusb (для ссылки). Хотя вроде проще установить pkg-config.

Tsyvarev 14.12.2020 23:48

@Tsyvarev спасибо, вы решили мою проблему (см. РЕДАКТИРОВАТЬ в конце моего вопроса), если вы напишете настоящий ТАК ответ, я с радостью приму его!

Blupon 15.12.2020 18:53
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
2
8 829
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ответ @Tsyvarev (см. комментарий), который я добавил в Обновлено: в конце моего вопроса. Я повторно публикую его решение здесь, чтобы закрыть вопрос и отметить его как решенный.

  1. установлен pkg-config с sudo apt install pkg-config
  2. удален первый репозиторий, полученный из исходного git clone, новый чистый git clone, новый /build и т. д., а затем make, который сработал!

Удаление старого клона репозитория и повторное создание чистого /build было необходимо, так как попытка запустить make в старом /build даже после установки pkg-config не сработала. Обратите внимание, что это означает, что в строке кода #include <libusb.h> в src/librtlsdr.c не требуется никаких изменений.

В качестве примечания для тех из вас, кто оказался здесь, потому что пытается установить блок «RTL-SDR Source» для GNU Radio, я подозреваю, что моя проблема на самом деле была в том, что я не установил gr-osmosdr с sudo apt install gr-osmosdr после установки rtl-sdr с простым sudo apt-get install rtl-sdr.

tl;dr (для меня): запустить sudo apt install pkg-config, клонировать новую копию проекта и перезапустить make

Ralph 27.09.2022 21:22

весь путь:

sudo apt install pkg-config
sudo apt install libusb-1.0-0
git clone git://git.osmocom.org/rtl-sdr.git
cd rtl-sdr
mkdir build
cd build
cmake ..
sudo make install

Другие вопросы по теме