Skip to content

[BUG]Link errors on Bookworm #519

@cjritola

Description

@cjritola

Describe your environment

$ uname -a
Linux host 6.6.0-060600-generic #202311151808 SMP PREEMPT_DYNAMIC Thu Nov 16 06:04:00 UTC 2023 x86_64 GNU/Linux

$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 12 (bookworm)
Release: 12
Codename: bookworm

$ sudo apt-get install build-essential cmake pkg-config libmp3lame-dev libshout3-dev 'libconfig++-dev' librtlsdr-dev
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
build-essential is already the newest version (12.9).
cmake is already the newest version (3.25.1-1).
pkg-config is already the newest version (1.8.1-1).
libmp3lame-dev is already the newest version (3.100-6).
libshout3-dev is already the newest version (2.4.6-1+b1).
libconfig++-dev is already the newest version (1.5-0.4).
librtlsdr-dev is already the newest version (0.6.0-4).
The following packages were automatically installed and are no longer required:
linux-headers-6.1.0-32-amd64 linux-headers-6.1.0-32-common
Use 'sudo apt autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

(python3-numpy is kept back)

$ cmake -DNFM=ON ../
-- Build type not specified: defaulting to Release
-- Found lame includes: /usr/include/lame/lame.h
-- Found lame library: /usr/lib/x86_64-linux-gnu/libmp3lame.so
-- Checking for module 'libmirisdr'
-- Package 'libmirisdr', required by 'virtual:world', not found
-- Could NOT find MiriSDR (missing: MIRISDR_LIBRARY MIRISDR_INCLUDE_DIR)
-- Checking for SoapySDR
-- SoapySDR found, /usr/include, SoapySDR
-- Checking for module 'libpulse'
-- Package 'libpulse', required by 'virtual:world', not found
-- RTLSDR-Airband configuration summary:

-- - Version string: 5.1.1
-- - Build type: Release
-- - Operating system: Linux
-- - SDR drivers:
-- - librtlsdr: requested: ON, enabled: TRUE
-- - mirisdr: requested: ON, enabled: FALSE
-- - soapysdr: requested: ON, enabled: TRUE
-- - Other options:
-- - Platform: native
-- - Build Unit Tests: FALSE
-- - Broadcom VideoCore GPU: FALSE
-- - NFM support: ON
-- - PulseAudio: requested: ON, enabled: FALSE
-- - Profiling: requested: OFF, enabled: FALSE
-- - Icecast TLS support: TRUE
-- Configuring done
-- Generating done
-- Build files have been written to: /home/user/RTLSDR-Airband-5.1.1/build

What happened?
Link errors near end of make stage:

$ make
[ 5%] Generating version.cpp, _version.cpp
[ 10%] Building CXX object src/CMakeFiles/rtl_airband_base.dir/config.cpp.o
[ 15%] Building CXX object src/CMakeFiles/rtl_airband_base.dir/input-common.cpp.o
[ 21%] Building CXX object src/CMakeFiles/rtl_airband_base.dir/input-file.cpp.o
[ 26%] Building CXX object src/CMakeFiles/rtl_airband_base.dir/input-helpers.cpp.o
[ 31%] Building CXX object src/CMakeFiles/rtl_airband_base.dir/mixer.cpp.o
[ 36%] Building CXX object src/CMakeFiles/rtl_airband_base.dir/output.cpp.o
[ 42%] Building CXX object src/CMakeFiles/rtl_airband_base.dir/rtl_airband.cpp.o
[ 47%] Building CXX object src/CMakeFiles/rtl_airband_base.dir/squelch.cpp.o
[ 52%] Building CXX object src/CMakeFiles/rtl_airband_base.dir/ctcss.cpp.o
[ 57%] Building CXX object src/CMakeFiles/rtl_airband_base.dir/util.cpp.o
[ 63%] Building CXX object src/CMakeFiles/rtl_airband_base.dir/udp_stream.cpp.o
[ 68%] Building CXX object src/CMakeFiles/rtl_airband_base.dir/logging.cpp.o
[ 73%] Building CXX object src/CMakeFiles/rtl_airband_base.dir/filters.cpp.o
[ 78%] Building CXX object src/CMakeFiles/rtl_airband_base.dir/helper_functions.cpp.o
[ 78%] Generating version.cpp, _version.cpp
[ 84%] Building CXX object src/CMakeFiles/rtl_airband_base.dir/version.cpp.o
[ 89%] Building CXX object src/CMakeFiles/rtl_airband_base.dir/input-rtlsdr.cpp.o
[ 94%] Building CXX object src/CMakeFiles/rtl_airband_base.dir/input-soapysdr.cpp.o
[ 94%] Built target rtl_airband_base
[100%] Linking CXX executable rtl_airband
/usr/bin/ld: /usr/local/lib/librtlsdr.a(librtlsdr.c.o): in function _libusb_callback': librtlsdr.c:(.text+0x25e): undefined reference to libusb_submit_transfer'
/usr/bin/ld: /usr/local/lib/librtlsdr.a(librtlsdr.c.o): in function fc0012_set_freq': librtlsdr.c:(.text+0x463): undefined reference to libusb_control_transfer'
/usr/bin/ld: librtlsdr.c:(.text+0x4b8): undefined reference to libusb_control_transfer' /usr/bin/ld: /usr/local/lib/librtlsdr.a(librtlsdr.c.o): in function rtlsdr_demod_write_reg.constprop.7':
librtlsdr.c:(.text+0x578): undefined reference to libusb_control_transfer' /usr/bin/ld: librtlsdr.c:(.text+0x5a8): undefined reference to libusb_control_transfer'
/usr/bin/ld: /usr/local/lib/librtlsdr.a(librtlsdr.c.o): in function rtlsdr_demod_write_reg.constprop.8': librtlsdr.c:(.text+0x718): undefined reference to libusb_control_transfer'
/usr/bin/ld: /usr/local/lib/librtlsdr.a(librtlsdr.c.o):librtlsdr.c:(.text+0x747): more undefined references to libusb_control_transfer' follow /usr/bin/ld: /usr/local/lib/librtlsdr.a(librtlsdr.c.o): in function rtlsdr_get_usb_strings':
librtlsdr.c:(.text+0x187d): undefined reference to libusb_get_device' /usr/bin/ld: librtlsdr.c:(.text+0x1888): undefined reference to libusb_get_device_descriptor'
/usr/bin/ld: librtlsdr.c:(.text+0x18dc): undefined reference to libusb_get_string_descriptor_ascii' /usr/bin/ld: librtlsdr.c:(.text+0x1926): undefined reference to libusb_get_string_descriptor_ascii'
/usr/bin/ld: librtlsdr.c:(.text+0x1971): undefined reference to libusb_get_string_descriptor_ascii' /usr/bin/ld: /usr/local/lib/librtlsdr.a(librtlsdr.c.o): in function rtlsdr_write_eeprom':
librtlsdr.c:(.text+0x1a0a): undefined reference to libusb_control_transfer' /usr/bin/ld: librtlsdr.c:(.text+0x1a31): undefined reference to libusb_control_transfer'
/usr/bin/ld: librtlsdr.c:(.text+0x1a67): undefined reference to libusb_control_transfer' /usr/bin/ld: /usr/local/lib/librtlsdr.a(librtlsdr.c.o): in function rtlsdr_read_eeprom':
librtlsdr.c:(.text+0x1b13): undefined reference to libusb_control_transfer' /usr/bin/ld: librtlsdr.c:(.text+0x1b5a): undefined reference to libusb_control_transfer'
/usr/bin/ld: /usr/local/lib/librtlsdr.a(librtlsdr.c.o):librtlsdr.c:(.text+0x2111): more undefined references to libusb_control_transfer' follow /usr/bin/ld: /usr/local/lib/librtlsdr.a(librtlsdr.c.o): in function rtlsdr_get_device_count':
librtlsdr.c:(.text+0x2f22): undefined reference to libusb_init' /usr/bin/ld: librtlsdr.c:(.text+0x2f38): undefined reference to libusb_get_device_list'
/usr/bin/ld: librtlsdr.c:(.text+0x2f6d): undefined reference to libusb_get_device_descriptor' /usr/bin/ld: librtlsdr.c:(.text+0x2fb3): undefined reference to libusb_free_device_list'
/usr/bin/ld: librtlsdr.c:(.text+0x2fbc): undefined reference to libusb_exit' /usr/bin/ld: /usr/local/lib/librtlsdr.a(librtlsdr.c.o): in function rtlsdr_get_device_name':
librtlsdr.c:(.text+0x2fe5): undefined reference to libusb_init' /usr/bin/ld: librtlsdr.c:(.text+0x2ffb): undefined reference to libusb_get_device_list'
/usr/bin/ld: librtlsdr.c:(.text+0x302d): undefined reference to libusb_get_device_descriptor' /usr/bin/ld: librtlsdr.c:(.text+0x3096): undefined reference to libusb_free_device_list'
/usr/bin/ld: librtlsdr.c:(.text+0x309f): undefined reference to libusb_exit' /usr/bin/ld: librtlsdr.c:(.text+0x30d0): undefined reference to libusb_free_device_list'
/usr/bin/ld: librtlsdr.c:(.text+0x30d9): undefined reference to libusb_exit' /usr/bin/ld: librtlsdr.c:(.text+0x30fe): undefined reference to libusb_free_device_list'
/usr/bin/ld: librtlsdr.c:(.text+0x3107): undefined reference to libusb_exit' /usr/bin/ld: /usr/local/lib/librtlsdr.a(librtlsdr.c.o): in function rtlsdr_get_device_usb_strings':
librtlsdr.c:(.text+0x3149): undefined reference to libusb_init' /usr/bin/ld: librtlsdr.c:(.text+0x3164): undefined reference to libusb_get_device_list'
/usr/bin/ld: librtlsdr.c:(.text+0x319d): undefined reference to libusb_get_device_descriptor' /usr/bin/ld: librtlsdr.c:(.text+0x31ed): undefined reference to libusb_free_device_list'
/usr/bin/ld: librtlsdr.c:(.text+0x31f7): undefined reference to libusb_exit' /usr/bin/ld: librtlsdr.c:(.text+0x3225): undefined reference to libusb_open'
/usr/bin/ld: librtlsdr.c:(.text+0x3252): undefined reference to libusb_close' /usr/bin/ld: /usr/local/lib/librtlsdr.a(librtlsdr.c.o): in function rtlsdr_open':
librtlsdr.c:(.text+0x3349): undefined reference to libusb_init' /usr/bin/ld: librtlsdr.c:(.text+0x3368): undefined reference to libusb_get_device_list'
/usr/bin/ld: librtlsdr.c:(.text+0x33a2): undefined reference to libusb_get_device_descriptor' /usr/bin/ld: librtlsdr.c:(.text+0x33f9): undefined reference to libusb_close'
/usr/bin/ld: librtlsdr.c:(.text+0x3406): undefined reference to libusb_exit' /usr/bin/ld: librtlsdr.c:(.text+0x3447): undefined reference to libusb_open'
/usr/bin/ld: librtlsdr.c:(.text+0x3460): undefined reference to libusb_free_device_list' /usr/bin/ld: librtlsdr.c:(.text+0x346b): undefined reference to libusb_kernel_driver_active'
/usr/bin/ld: librtlsdr.c:(.text+0x347f): undefined reference to libusb_claim_interface' /usr/bin/ld: librtlsdr.c:(.text+0x34c6): undefined reference to libusb_control_transfer'
/usr/bin/ld: librtlsdr.c:(.text+0x352f): undefined reference to libusb_control_transfer' /usr/bin/ld: librtlsdr.c:(.text+0x3554): undefined reference to libusb_control_transfer'
/usr/bin/ld: librtlsdr.c:(.text+0x3592): undefined reference to libusb_control_transfer' /usr/bin/ld: librtlsdr.c:(.text+0x35b7): undefined reference to libusb_control_transfer'
/usr/bin/ld: /usr/local/lib/librtlsdr.a(librtlsdr.c.o):librtlsdr.c:(.text+0x35f5): more undefined references to libusb_control_transfer' follow /usr/bin/ld: /usr/local/lib/librtlsdr.a(librtlsdr.c.o): in function rtlsdr_open':
librtlsdr.c:(.text+0x39ad): undefined reference to libusb_free_device_list' /usr/bin/ld: librtlsdr.c:(.text+0x3a99): undefined reference to libusb_reset_device'
/usr/bin/ld: /usr/local/lib/librtlsdr.a(librtlsdr.c.o): in function rtlsdr_close': librtlsdr.c:(.text+0x3bfa): undefined reference to libusb_release_interface'
/usr/bin/ld: librtlsdr.c:(.text+0x3c03): undefined reference to libusb_close' /usr/bin/ld: librtlsdr.c:(.text+0x3c0b): undefined reference to libusb_exit'
/usr/bin/ld: /usr/local/lib/librtlsdr.a(librtlsdr.c.o): in function rtlsdr_reset_buffer': librtlsdr.c:(.text+0x3c92): undefined reference to libusb_control_transfer'
/usr/bin/ld: librtlsdr.c:(.text+0x3cc5): undefined reference to libusb_control_transfer' /usr/bin/ld: /usr/local/lib/librtlsdr.a(librtlsdr.c.o): in function rtlsdr_read_async':
librtlsdr.c:(.text+0x3ea6): undefined reference to libusb_submit_transfer' /usr/bin/ld: librtlsdr.c:(.text+0x3eed): undefined reference to libusb_handle_events_timeout_completed'
/usr/bin/ld: librtlsdr.c:(.text+0x3f39): undefined reference to libusb_free_transfer' /usr/bin/ld: librtlsdr.c:(.text+0x3f78): undefined reference to libusb_dev_mem_free'
/usr/bin/ld: librtlsdr.c:(.text+0x4028): undefined reference to libusb_alloc_transfer' /usr/bin/ld: librtlsdr.c:(.text+0x40ca): undefined reference to libusb_cancel_transfer'
/usr/bin/ld: librtlsdr.c:(.text+0x40db): undefined reference to libusb_handle_events_timeout_completed' /usr/bin/ld: librtlsdr.c:(.text+0x411d): undefined reference to libusb_handle_events_timeout_completed'
/usr/bin/ld: /usr/local/lib/librtlsdr.a(librtlsdr.c.o): in function rtlsdr_i2c_write_fn': librtlsdr.c:(.text+0x41fd): undefined reference to libusb_control_transfer'
/usr/bin/ld: /usr/local/lib/librtlsdr.a(librtlsdr.c.o): in function rtlsdr_i2c_read_fn': librtlsdr.c:(.text+0x424d): undefined reference to libusb_control_transfer'
/usr/bin/ld: /usr/local/lib/librtlsdr.a(librtlsdr.c.o): in function rtlsdr_set_bias_tee': librtlsdr.c:(.text+0x42c4): undefined reference to libusb_control_transfer'
/usr/bin/ld: librtlsdr.c:(.text+0x431c): undefined reference to libusb_control_transfer' /usr/bin/ld: librtlsdr.c:(.text+0x4365): undefined reference to libusb_control_transfer'
/usr/bin/ld: /usr/local/lib/librtlsdr.a(librtlsdr.c.o): in function rtlsdr_read_sync': librtlsdr.c:(.text+0x3d4a): undefined reference to libusb_bulk_transfer'
collect2: error: ld returned 1 exit status
make[2]: *** [src/CMakeFiles/rtl_airband.dir/build.make:118: src/rtl_airband] Error 1
make[1]: *** [CMakeFiles/Makefile2:126: src/CMakeFiles/rtl_airband.dir/all] Error 2
make: *** [Makefile:136: all] Error 2

What you expected to happen?
Successful build.
If not a bug, was hoping you can tell me what your make file is trying to do with these external lib source files.

Steps to Reproduce
Slight chance a Debian Bookworm environment could cause it but smells more like a configuration or path issue I don't understand.

Additional context
This system has successfully built other rtl programs and has them running. I am puzzled as to why it is so concerned with these outside source files (i.e. librtlsdr.c) when they aren't in this project's directory tree. I was able to successfully build this on a ubuntu system with identical hardware. Looks like maybe a configuration issue on the bookworm system but exactly what is ambiguous to me as it doesn't make sense to me to begin with.

Also tried copying the build directory between systems after make but there are a lot of system-specific paths which aren't compatible.

Copying the executable works.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions