Skip to main content

Installing DDS Transport Libs on Ubuntu

The dds extra provides DDS (Data Distribution Service) transport support via Eclipse Cyclone DDS. The Python package builds C extensions against the CycloneDDS C library, so the C library must be installed before the Python package. No sudo, no system pollution. Requires Nix.
nix build nixpkgs#cyclonedds        # creates ./result symlink (GC root)
export CYCLONEDDS_HOME=$PWD/result
export LD_LIBRARY_PATH="$CYCLONEDDS_HOME/lib:$LD_LIBRARY_PATH"
uv pip install -e '.[dds]'
LD_LIBRARY_PATH must stay set at runtime. Persist with one of:
# Per-venv (auto-set on `source .venv/bin/activate`)
cat >> .venv/bin/activate <<EOF
export CYCLONEDDS_HOME=$(readlink -f ./result)
export LD_LIBRARY_PATH="\$CYCLONEDDS_HOME/lib:\${LD_LIBRARY_PATH:-}"
EOF
# Global (every shell)
cat >> ~/.bashrc <<EOF
export CYCLONEDDS_HOME=$(readlink -f ./result)
export LD_LIBRARY_PATH="\$CYCLONEDDS_HOME/lib:\${LD_LIBRARY_PATH:-}"
EOF
# Install the CycloneDDS development library
sudo apt install cyclonedds-dev

# Create a compatibility directory structure
# (required because Ubuntu's multiarch layout doesn't match the expected CMake layout)
sudo mkdir -p /opt/cyclonedds/{lib,bin,include}
sudo ln -sf /usr/lib/x86_64-linux-gnu/libddsc.so* /opt/cyclonedds/lib/
sudo ln -sf /usr/lib/x86_64-linux-gnu/libcycloneddsidl.so* /opt/cyclonedds/lib/
sudo ln -sf /usr/bin/idlc /opt/cyclonedds/bin/
sudo ln -sf /usr/bin/ddsperf /opt/cyclonedds/bin/
sudo ln -sf /usr/include/dds /opt/cyclonedds/include/
To install all extras including DDS:
CYCLONEDDS_HOME=/opt/cyclonedds uv sync --all-extras --all-groups