The steps are almost identical to the Ubuntu to Raspberry Pi OS Cross C++ Development guide, with the main differences being that you use a different distribution and release when calling mk-sbuild, and that you'll use the 64-bit toolchain.

Brief instructions for Ubuntu 21.10 (Impish Indri), 64-bit:

# Install the necessary tools:
sudo apt install ubuntu-dev-tools
# Then create a schroot environment for the arm64 environment, using Ubuntu 
# Impish (remember the name you used, you'll need it later):
mk-sbuild --arch=arm64 --skip-proposed --skip-updates --skip-security --name=rpi3-impish impish
# If this is the first time you run mk-sbuild, you'll have to follow some 
# instructions. Since we won't be publishing any software, you can simply accept
# the default configuration. Afterwards, reboot or log out and back in again, as 
# instructed. Alternatively, use 
su - $USER # to flush group membership.
# Then run the command again, this time it will actually create the schroot:
mk-sbuild --arch=arm64 --skip-proposed --skip-updates --skip-security --name=rpi3-impish impish
# Install some dependencies in the schroot. Use the sbuild-apt wrapper around 
# the apt-get tool, and give it the name of the schroot you created earlier,
# with the architecture as suffix:
sudo sbuild-apt rpi3-impish-arm64 apt-get install libboost-all-dev
# Download and extract the cross-compilation toolchain:
wget -qO- https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-aarch64-rpi3-linux-gnu.tar.bz2 | tar xJ -C ~/opt
# Add the toolchain to your path:
export PATH="$HOME/opt/x-tools/aarch64-rpi3-linux-gnu/bin:$PATH"
# Download the repository with the example CMake C++ project:
git clone https://github.com/tttapa/RPi-Cross-Cpp-Development.git
# Enter it:
cd RPi-Cross-Cpp-Development
# Replace the schroot name in the toolchain file by the name used earlier:
sed -i 's/schroot-name-arm64/rpi3-impish-arm64/' cmake/aarch64-rpi3-linux-gnu.cmake
# Configure the project for cross-compilation:
cmake -S. -Bbuild -DCMAKE_TOOLCHAIN_FILE="$PWD/cmake/aarch64-rpi3-linux-gnu.cmake"
# Build the project:
cmake --build build -j
# Install the project into the staging area:
cmake --install build
# Install the dependencies on the Raspberry Pi:
ssh RPi3 sudo apt-get install -y libboost-program-options1.74.0
# Copy the “Hello World” example program to the Raspberry Pi:
ssh RPi3 mkdir -p '~/.local/bin'
scp ~/RPi-dev/staging-aarch64-rpi3/bin/hello RPi3:~/.local/bin
# Run the example program:
ssh RPi3 bash --login -c hello
# Or simply log in using
ssh RPi3
# and then run the program there:
hello
# Copy the toolchain's gdbserver to the Pi:
scp ~/opt/x-tools/aarch64-rpi3-linux-gnu/aarch64-rpi3-linux-gnu/debug-root/usr/bin/gdbserver RPi3:~
# Install it:
ssh RPi3 sudo mv gdbserver /usr/local/bin
# Test it:
ssh RPi3 gdbserver --version
# Start GDB with the hello program on your computer:
aarch64-rpi3-linux-gnu-gdb ~/RPi-dev/staging-aarch64-rpi3/bin/hello
# Inside of GDB, set the sysroot:
set sysroot /var/lib/schroot/chroots/rpi3-impish-arm64
# Select and start the target:
target remote | ssh RPi3 gdbserver - '~/.local/bin/hello' --name Pieter
# Run program:
continue
# Exit GDB:
quit
aarch64-rpi3-linux-gnu-gdb ~/RPi-dev/staging-aarch64-rpi3/bin/hello
GNU gdb (crosstool-NG UNKNOWN) 10.2
Copyright (C) 2021 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "--host=x86_64-build_pc-linux-gnu --target=aarch64-rpi3-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ~/RPi-dev/staging-aarch64-rpi3/bin/hello...
(gdb) set sysroot /var/lib/schroot/chroots/rpi3-impish-arm64
(gdb) target remote | ssh RPi3 gdbserver - '~/.local/bin/hello' --name Pieter
Remote debugging using | ssh RPi3 gdbserver - '~/.local/bin/hello' --name Pieter
stdin/stdout redirected
Process /home/ubuntu/.local/bin/hello created; pid = 5815
Remote debugging using stdio
Reading symbols from /var/lib/schroot/chroots/rpi3-impish-arm64/lib/ld-linux-aarch64.so.1...
(No debugging symbols found in /var/lib/schroot/chroots/rpi3-impish-arm64/lib/ld-linux-aarch64.so.1)
0x0000fffff7fc8d40 in ?? ()
    from /var/lib/schroot/chroots/rpi3-impish-arm64/lib/ld-linux-aarch64.so.1
(gdb) c
Continuing.
Hello, Pieter!
[Inferior 1 (process 5815) exited normally]
(gdb) q