DSD-FME Compiling Notes for Linux

Also for other related SDR programs running under Linux.

This is using an "up-to-date" Kali Linux system (Dec. 2025).

$ sudo apt-get update
$ sudo apt-get install libpulse-dev libsndfile1-dev libfftw3-dev liblapack-dev socat libusb-1.0-0-dev libncurses5 libncurses5-dev rtl-sdr librtlsdr-dev libusb-1.0-0-dev cmake git wget make build-essential libitpp-dev libncursesw5-dev libcodec2-dev

or if you get a 'libcurses5' error:

$ sudo apt-get install libpulse-dev libsndfile1-dev libfftw3-dev liblapack-dev socat libusb-1.0-0-dev rtl-sdr librtlsdr-dev libusb-1.0-0-dev cmake git wget make build-essential libitpp-dev libcodec2-dev

Install MBELIB:

$ git clone https://github.com/lwvmobile/mbelib
$ cd mbelib
$ git checkout ambe_tones
$ mkdir build
$ cd build/
$ cmake ..
$ make
$ sudo make install
$ sudo ldconfig

Install and compile DSD-FME:

$ mkdir dsd
$ cd dsd
$ git clone https://github.com/lwvmobile/dsd-fme
$ cd dsd-fme/
$ mkdir build
$ cd build/
$ cmake ..
-- The C compiler identification is GNU 15.2.0
-- The CXX compiler identification is GNU 15.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found LibSndFile: /usr/lib/x86_64-linux-gnu/libsndfile.so
-- Found MBE: /usr/local/lib/libmbe.so
-- Found ITPP: /usr/local/lib/libitpp.so
-- Found PkgConfig: /usr/bin/pkg-config (found version "1.8.1")
-- Checking for module 'librtlsdr'
--   Found librtlsdr, version 2.0.1
-- Found RTLSDR: /usr/lib/x86_64-linux-gnu/librtlsdr.so
-- Looking for wsyncup in /usr/lib/x86_64-linux-gnu/libcurses.so
-- Looking for wsyncup in /usr/lib/x86_64-linux-gnu/libcurses.so - found
-- Looking for cbreak in /usr/lib/x86_64-linux-gnu/libncursesw.so
-- Looking for cbreak in /usr/lib/x86_64-linux-gnu/libncursesw.so - found
-- Looking for nodelay in /usr/lib/x86_64-linux-gnu/libncursesw.so
-- Looking for nodelay in /usr/lib/x86_64-linux-gnu/libncursesw.so - found
-- Found Curses: /usr/lib/x86_64-linux-gnu/libncursesw.so
-- Found PulseAudio: /usr/lib/x86_64-linux-gnu/libpulse.so (found version "17.0")
-- Checking for module 'codec2'
--   Found codec2, version 1.2.0
-- Found CODEC2: /usr/lib/x86_64-linux-gnu/libcodec2.so
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Configuring done (1.7s)
-- Generating done (0.0s)
-- Build files have been written to: /complete/path/to/dsd-fme/build
$ make
[  1%] Building CXX object CMakeFiles/dsd-fme.dir/src/Hamming.cpp.o
[  2%] Building C object CMakeFiles/dsd-fme.dir/src/bptc.c.o
[  3%] Building C object CMakeFiles/dsd-fme.dir/src/crypt-aes.c.o
[  4%] Building C object CMakeFiles/dsd-fme.dir/src/crypt-des.c.o
[  5%] Building C object CMakeFiles/dsd-fme.dir/src/crypt-etc.c.o
[  6%] Building C object CMakeFiles/dsd-fme.dir/src/crypt-kir.c.o
[  7%] Building C object CMakeFiles/dsd-fme.dir/src/crypt-pc4.c.o
[  8%] Building C object CMakeFiles/dsd-fme.dir/src/crypt-pc5.c.o
[  9%] Building C object CMakeFiles/dsd-fme.dir/src/crypt-rc2.c.o
[ 10%] Building C object CMakeFiles/dsd-fme.dir/src/crypt-rc4.c.o
[ 11%] Building C object CMakeFiles/dsd-fme.dir/src/crypt-tyt.c.o
[ 12%] Building C object CMakeFiles/dsd-fme.dir/src/dmr_34.c.o
[ 13%] Building C object CMakeFiles/dsd-fme.dir/src/dmr_block.c.o
[ 14%] Building C object CMakeFiles/dsd-fme.dir/src/dmr_bs.c.o
[ 15%] Building C object CMakeFiles/dsd-fme.dir/src/dmr_csbk.c.o
[ 17%] Building C object CMakeFiles/dsd-fme.dir/src/dmr_data.c.o
[ 18%] Building C object CMakeFiles/dsd-fme.dir/src/dmr_dburst.c.o
[ 19%] Building C object CMakeFiles/dsd-fme.dir/src/dmr_flco.c.o
[ 20%] Building C object CMakeFiles/dsd-fme.dir/src/dmr_le.c.o
[ 21%] Building C object CMakeFiles/dsd-fme.dir/src/dmr_ms.c.o
[ 22%] Building C object CMakeFiles/dsd-fme.dir/src/dmr_pdu.c.o
[ 23%] Building C object CMakeFiles/dsd-fme.dir/src/dmr_pi.c.o
[ 24%] Building C object CMakeFiles/dsd-fme.dir/src/dmr_utils.c.o
[ 25%] Building C object CMakeFiles/dsd-fme.dir/src/dpmr_data.c.o
[ 26%] Building C object CMakeFiles/dsd-fme.dir/src/dpmr_voice.c.o
[ 27%] Building C object CMakeFiles/dsd-fme.dir/src/dsd_alias.c.o
[ 28%] Building C object CMakeFiles/dsd-fme.dir/src/dsd_audio.c.o
[ 29%] Building C object CMakeFiles/dsd-fme.dir/src/dsd_audio2.c.o
[ 30%] Building C object CMakeFiles/dsd-fme.dir/src/dsd_dibit.c.o
[ 31%] Building C object CMakeFiles/dsd-fme.dir/src/dsd_events.c.o
[ 32%] Building C object CMakeFiles/dsd-fme.dir/src/dsd_file.c.o
[ 34%] Building C object CMakeFiles/dsd-fme.dir/src/dsd_filters.c.o
[ 35%] Building C object CMakeFiles/dsd-fme.dir/src/dsd_frame.c.o
[ 36%] Building C object CMakeFiles/dsd-fme.dir/src/dsd_frame_sync.c.o
[ 37%] Building C object CMakeFiles/dsd-fme.dir/src/dsd_gps.c.o
[ 38%] Building C object CMakeFiles/dsd-fme.dir/src/dsd_import.c.o
[ 39%] Building C object CMakeFiles/dsd-fme.dir/src/dsd_ks.c.o
[ 40%] Building C object CMakeFiles/dsd-fme.dir/src/dsd_main.c.o
[ 41%] Building C object CMakeFiles/dsd-fme.dir/src/dsd_mbe.c.o
[ 42%] Building C object CMakeFiles/dsd-fme.dir/src/dsd_mbe2.c.o
[ 43%] Building C object CMakeFiles/dsd-fme.dir/src/dsd_misc.c.o
[ 44%] Building C object CMakeFiles/dsd-fme.dir/src/dsd_ncurses_handler.c.o
[ 45%] Building C object CMakeFiles/dsd-fme.dir/src/dsd_ncurses_menu.c.o
[ 46%] Building C object CMakeFiles/dsd-fme.dir/src/dsd_ncurses_printer.c.o
[ 47%] Building C object CMakeFiles/dsd-fme.dir/src/dsd_reset.c.o
[ 48%] Building C object CMakeFiles/dsd-fme.dir/src/dsd_rigctl.c.o
[ 50%] Building C object CMakeFiles/dsd-fme.dir/src/dsd_serial.c.o
[ 51%] Building C object CMakeFiles/dsd-fme.dir/src/dsd_symbol.c.o
[ 52%] Building C object CMakeFiles/dsd-fme.dir/src/dsd_time.c.o
[ 53%] Building C object CMakeFiles/dsd-fme.dir/src/dsd_upsample.c.o
[ 54%] Building C object CMakeFiles/dsd-fme.dir/src/dstar.c.o
[ 55%] Building C object CMakeFiles/dsd-fme.dir/src/dstar_header.c.o
[ 56%] Building C object CMakeFiles/dsd-fme.dir/src/edacs-bch3.c.o
[ 57%] Building C object CMakeFiles/dsd-fme.dir/src/edacs-fme.c.o
[ 58%] Building CXX object CMakeFiles/dsd-fme.dir/src/ez.cpp.o
[ 59%] Building C object CMakeFiles/dsd-fme.dir/src/fec.c.o
[ 60%] Building C object CMakeFiles/dsd-fme.dir/src/m17.c.o
[ 61%] Building C object CMakeFiles/dsd-fme.dir/src/nxdn_convolution.c.o
[ 62%] Building C object CMakeFiles/dsd-fme.dir/src/nxdn_deperm.c.o
[ 63%] Building C object CMakeFiles/dsd-fme.dir/src/nxdn_element.c.o
[ 64%] Building C object CMakeFiles/dsd-fme.dir/src/nxdn_frame.c.o
[ 65%] Building C object CMakeFiles/dsd-fme.dir/src/nxdn_voice.c.o
[ 67%] Building C object CMakeFiles/dsd-fme.dir/src/p25_12.c.o
[ 68%] Building C object CMakeFiles/dsd-fme.dir/src/p25_crc.c.o
[ 69%] Building C object CMakeFiles/dsd-fme.dir/src/p25_frequency.c.o
[ 70%] Building C object CMakeFiles/dsd-fme.dir/src/p25_lcw.c.o
[ 71%] Building CXX object CMakeFiles/dsd-fme.dir/src/p25p1_check_hdu.cpp.o
[ 72%] Building CXX object CMakeFiles/dsd-fme.dir/src/p25p1_check_ldu.cpp.o
[ 73%] Building CXX object CMakeFiles/dsd-fme.dir/src/p25p1_check_nid.cpp.o
[ 74%] Building C object CMakeFiles/dsd-fme.dir/src/p25p1_hdu.c.o
[ 75%] Building C object CMakeFiles/dsd-fme.dir/src/p25p1_heuristics.c.o
[ 76%] Building C object CMakeFiles/dsd-fme.dir/src/p25p1_ldu.c.o
[ 77%] Building C object CMakeFiles/dsd-fme.dir/src/p25p1_ldu1.c.o
[ 78%] Building C object CMakeFiles/dsd-fme.dir/src/p25p1_ldu2.c.o
[ 79%] Building C object CMakeFiles/dsd-fme.dir/src/p25p1_mdpu.c.o
[ 80%] Building C object CMakeFiles/dsd-fme.dir/src/p25p1_pdu_data.c.o
[ 81%] Building C object CMakeFiles/dsd-fme.dir/src/p25p1_pdu_trunking.c.o
[ 82%] Building C object CMakeFiles/dsd-fme.dir/src/p25p1_tdu.c.o
[ 84%] Building C object CMakeFiles/dsd-fme.dir/src/p25p1_tdulc.c.o
[ 85%] Building C object CMakeFiles/dsd-fme.dir/src/p25p1_tsbk.c.o
[ 86%] Building C object CMakeFiles/dsd-fme.dir/src/p25p2_frame.c.o
[ 87%] Building C object CMakeFiles/dsd-fme.dir/src/p25p2_vpdu.c.o
[ 88%] Building C object CMakeFiles/dsd-fme.dir/src/p25p2_xcch.c.o
[ 89%] Building C object CMakeFiles/dsd-fme.dir/src/pa_devs.c.o
[ 90%] Building C object CMakeFiles/dsd-fme.dir/src/provoice.c.o
[ 91%] Building C object CMakeFiles/dsd-fme.dir/src/pulse_devices.c.o
[ 92%] Building C object CMakeFiles/dsd-fme.dir/src/rs-12-9.c.o
[ 93%] Building CXX object CMakeFiles/dsd-fme.dir/src/rtl_sdr_fm.cpp.o
[ 94%] Building C object CMakeFiles/dsd-fme.dir/src/sjis_unicode.c.o
[ 95%] Building C object CMakeFiles/dsd-fme.dir/src/x2tdma_data.c.o
[ 96%] Building C object CMakeFiles/dsd-fme.dir/src/x2tdma_voice.c.o
[ 97%] Building C object CMakeFiles/dsd-fme.dir/src/ysf.c.o
[ 98%] Building C object CMakeFiles/dsd-fme.dir/git_ver.c.o
[100%] Linking CXX executable dsd-fme
[100%] Built target dsd-fme
$ sudo make install
[100%] Built target dsd-fme
Install the project...
-- Install configuration: ""
-- Installing: /usr/local/bin/dsd-fme
-- Set non-toolchain portion of runtime path of "/usr/local/bin/dsd-fme" to ""
$ sudo ldconfig

If you get an 'ITPP Not Found' error:

$ sudo apt-get install libitpp-dev

or 

# Download itpp-4.3.1.tar.gz
$ tar xvzf itpp-4.3.1.tar.gz
$ cd itpp-4.3.1/
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install
$ sudo ldconfig

If you get a "RTL Support not enabled/compiled, falling back to Pulse Audio Audio Input." error:

$ sudo apt-get install librtlsdr-dev

and recompile.

Plug in RTL SDR.

$ dmesg
[1570482.655252] rc rc0: Realtek RTL2832U reference design as /devices/pci0000:00/0000:00:1c.6/0000:08:00.0/usb3/3-4/3-4.2/rc/rc0
[1570482.655316] rc rc0: lirc_dev: driver dvb_usb_rtl28xxu registered at minor = 0, raw IR receiver, no transmitter
[1570482.655360] input: Realtek RTL2832U reference design as /devices/pci0000:00/0000:00:1c.6/0000:08:00.0/usb3/3-4/3-4.2/rc/rc0/input226
[1570482.655527] usb 3-4.2: dvb_usb_v2: schedule remote query interval to 200 msecs
[1570482.664935] usb 3-4.2: dvb_usb_v2: 'Realtek RTL2832U reference design' successfully initialized and connected

To test if it's working:

$ dsd-fme -i rtl
[ Cool ANSI Graphics]
Build Version: AW 2025-216-gabf2859 
MBElib Version: 1.3.0
CODEC2 Support Enabled
RTL Input: Found 1 device(s):
  0:  Realtek, RTL2838UHIDIR, SN: 00000001
Selected Device #0 with Serial Number: 00000001 
Dev 0 Freq 850000000 Gain 0 PPM 0 BW 12 SQ 100 VOL 2 
Audio In Device: rtl
Setting RTL Bandwidth to 12000 Hz
Setting RTL RMS Squelch Level to 100
Detached kernel driver
Found Rafael Micro R820T tuner
Using RTLSDR Device Index: 0. 
Tuner gain set to automatic.
Setting RTL Autogain. 
WARNING: Failed to set ppm error.
 (Center Frequency: 850252000 Hz.) 
Oversampling input by: 84x.
Oversampling output by: 1x.
Buffer size: 8.13ms
Exact sample rate is: 1008000.009613 Hz
Allocating 15 zero-copy buffers
Sampling at 1008000 S/s.
Output at 12000 Hz.

Run using the -N for the Curses menu.

$ sudo apt-get install /complete/path/to/sdrpp_debian_sid_amd64.deb
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Note, selecting 'sdrpp' instead of '/tmp/sdrpp_debian_sid_amd64.deb'
Solving dependencies... Done
The following NEW packages will be installed:
  sdrpp
0 upgraded, 1 newly installed, 0 to remove and 991 not upgraded.
Need to get 0 B/2,240 kB of archives.
After this operation, 0 B of additional disk space will be used.
Get:1 /complete/path/to/sdrpp_debian_sid_amd64.deb sdrpp all 1.2.1-1487 [2,240 kB]
Selecting previously unselected package sdrpp.
(Reading database ... 905970 files and directories currently installed.)
Preparing to unpack .../complete/path/to/sdrpp_debian_sid_amd64.deb ...
Unpacking sdrpp (1.2.1-1487) ...
Setting up sdrpp (1.2.1-1487) ...
Processing triggers for kali-menu (2025.4.3) ...
Processing triggers for desktop-file-utils (0.28-1) ...
Processing triggers for gnome-menus (3.38.1-1) ...
Processing triggers for mailcap (3.75) ...
$ ls -l /usr/bin/sdrpp
-rwxr-xr-x 1 root root 16024 Dec 12 00:58 /usr/bin/sdrpp
dsd-fme -i tcp -N -T -U 4532 -f2 -m2 2> log.ans