【问题标题】:fatal error: libusb/libusb.h: No such file or directory librtlsdr install for GNU radio致命错误:libusb/libusb.h:没有为 GNU 无线电安装这样的文件或目录 librtlsdr
【发布时间】:2021-03-25 12:31:22
【问题描述】:

由于here 的指示,尝试安装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-1.0/libusb.h> 替换原来的#include <libusb.h>(如建议的herehere),这导致了不同的失败:

/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(参见 herehere)相关(因为我使用make,不习惯)。

我还尝试将原来的#include <libusb.h> 替换为#include <usb.h>(如here 所示)导致:

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

仅供参考 libusb-1.0-0-devlibusb-dev 已经安装(正如建议的 here,我试过了,尽管我猜我已经安装了它......):

/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).

并且已经使用apt 安装了rtl-sdr

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

关于我的系统:Linux 版本 5.4.0-58-generic gcc 版本 7.5.0(Ubuntu 7.5.0-3ubuntu1~18.04)。此安装旨在能够将 DVB-T 加密狗与 GNU Radio 一起使用,这需要 rtl-sdr 安装。

编辑:@Tsyvarev 回答后

  1. 安装pkg-configsudo apt install pkg-config
  2. 删除了由初始 git clone 产生的第一个存储库,新的清理 git clone、新的/build 等,然后是make,它成功了!

删除旧的存储库克隆并重新创建一个干净的/build 是必要的,因为即使在安装pkg-config 之后尝试在旧的/build 中启动make 也不起作用。请注意,这意味着不需要对 src/librtlsdr.c 中的 #include <libusb.h> 代码行进行任何更改。

作为旁注,对于那些因为试图为 GNU Radio 安装“RTL-SDR Source”块而最终来到这里的人,我怀疑我的问题实际上是我没有安装 gr-osmosdr在安装rtl-sdr 后使用sudo apt install gr-osmosdr 使用简单的sudo apt-get install rtl-sdr

【问题讨论】:

  • 根据项目的CMakeLists.txt,它希望使用pkg-config 找到libusb,或者如果pkg-config 不可用,则应手动填写libusb 参数LIBUSB_INCLUDE_DIRS 应设置为包含目录(/usr/include/libusb-1.0 在您的情况下),LIBUSB_LIBRARIES 应设置为 libusb 库(用于链接)。虽然安装pkg-config 似乎更简单。
  • @Tsyvarev 谢谢,您解决了我的问题(请参阅问题末尾的 EDIT),如果您写出真正的 SO 答案,我会很乐意接受!

标签: cmake libusb gnuradio libusb-1.0 rtl-sdr


【解决方案1】:

@Tsyvarev 答案(见评论),我把它放在我的问题末尾的 EDIT: 中。我在这里重新发布他的解决方案,以关闭问题并将其标记为已解决。

  1. 安装了pkg-configsudo apt install pkg-config
  2. 删除了由初始git clone 产生的第一个存储库,新的清理 git clone、新的/build 等,然后是make,它成功了!

删除旧的存储库克隆并重新创建一个干净的/build 是必要的,因为即使在安装pkg-config 之后尝试在旧的/build 中启动make 也不起作用。请注意,这意味着不需要对 src/librtlsdr.c 中的 #include <libusb.h> 代码行进行任何更改。

作为旁注,对于那些因为试图为 GNU Radio 安装“RTL-SDR Source”块而最终来到这里的人,我怀疑我的问题实际上是我没有安装 gr-osmosdr在安装rtl-sdr 后使用sudo apt install gr-osmosdr 使用简单的sudo apt-get install rtl-sdr

【讨论】:

    【解决方案2】:

    全程:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-11
      • 1970-01-01
      • 1970-01-01
      • 2013-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多