Using C++ Shared Library¶
Navigate to examples under the ouster-sdk source directory, which should contain several linux example folders building against the sdk library. To run each use the example.bash script.
Compiled In Linking example¶
This is a simple example on how to build and link a cpp project with the ouster_pcap
library.
Bash script to run the example in a container:
#! /bin/bash
set -ex
currentDir="$(cd $(dirname $0) && pwd)"
baseDir=$currentDir/../..
tempDir="$(mktemp -d)"
APT_PROXY=${APT_PROXY:-""}
APT_MIRROR=${APT_MIRROR:-""}
APT_MIRROR_SECURITY=${APT_MIRROR_SECURITY:-""}
baseImage="ubuntu:22.04"
if ! [ -z "$1" ]; then
baseImage="$1"
fi
trap 'rm -rf $tempDir' EXIT
trap 'echo \*\*\* ERROR on line: $LINENO exit_code: $?' ERR
cd $baseDir
pwd
docker build -f $currentDir/Dockerfile --iidfile=$tempDir/iid \
--network host \
--build-arg APT_PROXY="$APT_PROXY" \
--build-arg APT_MIRROR="$APT_MIRROR" \
--build-arg APT_MIRROR_SECURITY="$APT_MIRROR_SECURITY" \
--build-arg BASE=$baseImage .
docker run --rm $(cat $tempDir/iid)
Dockerfile:
ARG BASE="ubuntu:22.04"
FROM ${BASE}
ARG APT_PROXY=""
ARG APT_MIRROR=""
ARG APT_MIRROR_SECURITY=""
ENV WORKSPACE=/root
RUN /bin/sh -c "if ! [ -z \"$APT_PROXY\" ]; then \
echo 'Using Proxy for APT'; \
echo 'Acquire::http::Proxy \"$APT_PROXY\";' > /etc/apt/apt.conf.d/01proxy; \
fi"
RUN /bin/sh -c "if ! [ -z \"$APT_MIRROR\" ]; then \
sed -i \"s|http://archive.ubuntu.com/ubuntu|$APT_MIRROR|g\" /etc/apt/sources.list; \
fi"
RUN /bin/sh -c "if ! [ -z \"$APT_MIRROR_SECURITY\" ]; then \
sed -i \"s|http://security.ubuntu.com/ubuntu|$APT_MIRROR_SECURITY|g\" /etc/apt/sources.list; \
elif ! [ -z \"$APT_MIRROR\" ]; then \
sed -i \"s|http://security.ubuntu.com/ubuntu|$APT_MIRROR|g\" /etc/apt/sources.list; \
fi"
RUN apt-get update \
&& apt-get install -y python3 python3-venv python3-pip \
&& mkdir -p $WORKSPACE/scripts/dev_script_library
COPY ./scripts/dev.py ./scripts/requirements.txt \
$WORKSPACE/scripts/
COPY ./scripts/dev.py ./scripts/requirements.txt \
./scripts/dev_script_library/build_libs.py \
./scripts/dev_script_library/context.py \
./scripts/dev_script_library/dev_dependencies.py \
$WORKSPACE/scripts/dev_script_library/
RUN python3 -m venv $WORKSPACE/venv && \
. $WORKSPACE/venv/bin/activate && \
cd $WORKSPACE && \
python3 ./scripts/dev.py utils install-system-packages
COPY . $WORKSPACE/sdk/
COPY tests/pcaps/OS-2-32-U0_v2.0.0_1024x10.pcap examples/compiled_in_linking_example/CMakeLists.txt \
examples/compiled_in_linking_example/main.cpp $WORKSPACE/
RUN cd $WORKSPACE && \
cmake -DBUILD_EXAMPLES=OFF -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF . && \
cmake --build . --parallel 4
CMD $WORKSPACE/pcap_test /root/OS-2-32-U0_v2.0.0_1024x10.pcap
Shared Linking example¶
This is a simple example on how to build a shared library and link a cpp project with the ouster_pcap library.
Bash script to run the example in a container:
#! /bin/bash
set -ex
currentDir="$(cd "$(dirname "$0")" && pwd)"
baseDir="$currentDir/../.."
tempDir="$(mktemp -d)"
VCPKG_BINARY_SOURCES=${VCPKG_BINARY_SOURCES:-""}
APT_PROXY=${APT_PROXY:-""}
APT_MIRROR=${APT_MIRROR:-""}
APT_MIRROR_SECURITY=${APT_MIRROR_SECURITY:-""}
baseImage="ubuntu:22.04"
if ! [ -z "$1" ]; then
baseImage="$1"
fi
trap 'rm -rf $tempDir' EXIT
trap 'echo \*\*\* ERROR on line: $LINENO exit_code: $?' ERR
cd "$baseDir"
pwd
docker build -f "$currentDir/Dockerfile" --iidfile="$tempDir/iid" \
--network host \
--build-arg BASE="$baseImage" \
--build-arg APT_PROXY="$APT_PROXY" \
--build-arg APT_MIRROR="$APT_MIRROR" \
--build-arg APT_MIRROR_SECURITY="$APT_MIRROR_SECURITY" \
--build-arg VCPKG_BINARY_SOURCES="$VCPKG_BINARY_SOURCES" .
docker run --rm "$(cat "$tempDir/iid")"
Dockerfile:
# ============================== BASE CONTAINER ==============================
ARG BASE="ubuntu:22.04"
FROM ${BASE} AS BASE_IMAGE
ARG APT_PROXY=""
ARG APT_MIRROR=""
ARG APT_MIRROR_SECURITY=""
ENV WORKSPACE=/root
RUN /bin/sh -c "if ! [ -z \"$APT_PROXY\" ]; then \
echo 'Using Proxy for APT'; \
echo 'Acquire::http::Proxy \"$APT_PROXY\";' > /etc/apt/apt.conf.d/01proxy; \
fi"
RUN /bin/sh -c "if ! [ -z \"$APT_MIRROR\" ]; then \
sed -i \"s|http://archive.ubuntu.com/ubuntu|$APT_MIRROR|g\" /etc/apt/sources.list; \
fi"
RUN /bin/sh -c "if ! [ -z \"$APT_MIRROR_SECURITY\" ]; then \
sed -i \"s|http://security.ubuntu.com/ubuntu|$APT_MIRROR_SECURITY|g\" /etc/apt/sources.list; \
fi"
RUN apt-get update && apt-get install -y --no-install-recommends curl ca-certificates && \
curl -4fsSL --retry 10 --retry-delay 30 --retry-all-errors \
https://archive.ubuntu.com/ubuntu/pool/main/u/ubuntu-keyring/ubuntu-keyring_2023.11.28.1_all.deb \
-o /tmp/ubuntu-keyring.deb && \
dpkg -i /tmp/ubuntu-keyring.deb && \
rm /tmp/ubuntu-keyring.deb && \
apt-get update && \
apt-get install -y python3 python3-venv python3-pip && \
mkdir -p $WORKSPACE/scripts/dev_script_library && \
rm -rf /var/lib/apt/lists/*
# ============================== BUILD STAGE ==============================
FROM BASE_IMAGE AS BUILD
ARG VCPKG_BINARY_SOURCES=""
ENV VCPKG_BINARY_SOURCES=$VCPKG_BINARY_SOURCES
COPY ./scripts/dev.py ./scripts/requirements.txt \
$WORKSPACE/scripts/
COPY ./scripts/dev.py ./scripts/requirements.txt \
./scripts/dev_script_library/build_libs.py \
./scripts/dev_script_library/context.py \
./scripts/dev_script_library/dev_dependencies.py \
$WORKSPACE/scripts/dev_script_library/
RUN python3 -m venv $WORKSPACE/venv && \
. $WORKSPACE/venv/bin/activate && \
cd $WORKSPACE && \
python3 ./scripts/dev.py utils install-vcpkg-package-requirements && \
python3 ./scripts/dev.py utils enable-local-vcpkg
ENV INSTALL_DIR="/usr/local"
COPY . $WORKSPACE/
RUN cd $WORKSPACE && \
cmake -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR -DBUILD_EXAMPLES=OFF \
-DBUILD_SHARED_LIBRARY=ON -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF \
-DCMAKE_TOOLCHAIN_FILE=$WORKSPACE/.osdkv2/vcpkg/scripts/buildsystems/vcpkg.cmake . &&\
cmake --build . --parallel 4 --target install
# ============================== FINAL STAGE ==============================
FROM BASE_IMAGE
RUN apt-get update && apt-get install -y \
build-essential \
cmake \
libeigen3-dev \
libflatbuffers-dev \
&& rm -rf /var/lib/apt/lists/*
ENV WORKSPACE=/root
ENV INSTALL_DIR="/usr/local"
COPY --from=BUILD $INSTALL_DIR $INSTALL_DIR
COPY tests/pcaps/OS-2-32-U0_v2.0.0_1024x10.pcap examples/shared_linking_example/CMakeLists.txt \
examples/shared_linking_example/main.cpp $WORKSPACE/
RUN export CMAKE_PREFIX_PATH="$INSTALL_DIR" &&\
mkdir -p $WORKSPACE/build &&\
cd $WORKSPACE/build &&\
cmake $WORKSPACE && cmake --build . --parallel 4
CMD $WORKSPACE/build/pcap_test /root/OS-2-32-U0_v2.0.0_1024x10.pcap
Static Linking example¶
This is a simple example on how to build a static shared library and link a cpp project with the ouster_pcap library.
Bash script to run the example in a container:
#! /bin/bash
set -ex
currentDir="$(cd $(dirname $0) && pwd)"
baseDir=$currentDir/../..
tempDir="$(mktemp -d)"
VCPKG_BINARY_SOURCES=${VCPKG_BINARY_SOURCES:-""}
APT_PROXY=${APT_PROXY:-""}
APT_MIRROR=${APT_MIRROR:-""}
APT_MIRROR_SECURITY=${APT_MIRROR_SECURITY:-""}
trap 'rm -rf $tempDir' EXIT
trap 'echo \*\*\* ERROR on line: $LINENO exit_code: $?' ERR
cd "$baseDir"
pwd
docker build -f $currentDir/Dockerfile --iidfile=$tempDir/iid \
--network host \
--build-arg VCPKG_BINARY_SOURCES="$VCPKG_BINARY_SOURCES" \
--build-arg APT_PROXY="$APT_PROXY" \
--build-arg APT_MIRROR="$APT_MIRROR" \
--build-arg APT_MIRROR_SECURITY="$APT_MIRROR_SECURITY" .
docker run --rm $(cat $tempDir/iid)
Dockerfile:
# ============================== BASE CONTAINER ==============================
FROM ubuntu:22.04 AS BASE_IMAGE
ENV INSTALL_DIR="/usr/local"
ENV WORKSPACE=/root
ARG APT_PROXY=""
ARG APT_MIRROR=""
ARG APT_MIRROR_SECURITY=""
RUN /bin/sh -c "if ! [ -z \"$APT_PROXY\" ]; then \
echo 'Using Proxy for APT'; \
echo 'Acquire::http::Proxy \"$APT_PROXY\";' > /etc/apt/apt.conf.d/01proxy; \
fi"
RUN /bin/sh -c "if ! [ -z \"$APT_MIRROR\" ]; then \
sed -i \"s|http://archive.ubuntu.com/ubuntu|$APT_MIRROR|g\" /etc/apt/sources.list; \
fi"
RUN /bin/sh -c "if ! [ -z \"$APT_MIRROR_SECURITY\" ]; then \
sed -i \"s|http://security.ubuntu.com/ubuntu|$APT_MIRROR_SECURITY|g\" /etc/apt/sources.list; \
elif ! [ -z \"$APT_MIRROR\" ]; then \
sed -i \"s|http://security.ubuntu.com/ubuntu|$APT_MIRROR|g\" /etc/apt/sources.list; \
fi"
RUN apt-get update \
&& apt-get install -y python3 python3-venv
COPY ./scripts/dev.py ./scripts/requirements.txt \
$WORKSPACE/scripts/
COPY ./scripts/dev.py ./scripts/requirements.txt \
./scripts/dev_script_library/build_libs.py \
./scripts/dev_script_library/context.py \
./scripts/dev_script_library/dev_dependencies.py \
$WORKSPACE/scripts/dev_script_library/
RUN python3 -m venv $WORKSPACE/venv \
&& . $WORKSPACE/venv/bin/activate \
&& python3 -m pip install -r $WORKSPACE/scripts/requirements.txt \
&& cd $WORKSPACE \
&& python3 ./scripts/dev.py utils install-system-packages
# ============================== BUILD WITH DEV SCRIPTS STAGE ==============================
FROM BASE_IMAGE AS BUILD_W_DEV_SCRIPTS
COPY . $WORKSPACE/
RUN cd $WORKSPACE \
&& rm -rf build \
&& python3 -m venv $WORKSPACE/venv \
&& . $WORKSPACE/venv/bin/activate \
&& $WORKSPACE/scripts/dev.sh build cpp --install-dir $INSTALL_DIR --no-examples \
--build-type Release --threads 4 --use-system-libs
# ============================== BUILD WITHOUT DEV SCRIPTS STAGE ==============================
FROM BASE_IMAGE AS BUILD_WO_DEV_SCRIPTS
COPY . $WORKSPACE/
RUN python3 -m venv $WORKSPACE/venv \
&& . $WORKSPACE/venv/bin/activate \
&& cd $WORKSPACE
ENV INSTALL_DIR="/usr/local"
COPY . $WORKSPACE/
RUN cd $WORKSPACE \
&& cmake -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR -DBUILD_EXAMPLES=OFF \
-DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF . \
&& cmake --build . --parallel 4 --target install
# ============================== BUILD TESTER (WITH DEV SCRIPTS) ==============================
FROM BASE_IMAGE AS BUILD_TESTER_W_DEV
ENV INSTALL_DIR="/usr/local"
COPY --from=BUILD_W_DEV_SCRIPTS $INSTALL_DIR $INSTALL_DIR
COPY tests/pcaps/OS-2-32-U0_v2.0.0_1024x10.pcap examples/static_linking_example/CMakeLists.txt \
examples/static_linking_example/main.cpp $WORKSPACE/
RUN export CMAKE_PREFIX_PATH="$INSTALL_DIR" \
&& mkdir -p $WORKSPACE/build \
&& cd $WORKSPACE/build \
&& cmake $WORKSPACE -DCMAKE_BUILD_TYPE=Release \
&& cmake --build . --parallel 4
# ============================== BUILD TESTER (WITHOUT DEV SCRIPTS) ==============================
FROM BASE_IMAGE AS BUILD_TESTER_WO_DEV
ENV INSTALL_DIR="/usr/local"
COPY --from=BUILD_WO_DEV_SCRIPTS $INSTALL_DIR $INSTALL_DIR
COPY tests/pcaps/OS-2-32-U0_v2.0.0_1024x10.pcap examples/static_linking_example/CMakeLists.txt \
examples/static_linking_example/main.cpp $WORKSPACE/
RUN export CMAKE_PREFIX_PATH="$INSTALL_DIR" \
&& mkdir -p $WORKSPACE/build \
&& cd $WORKSPACE/build \
&& cmake $WORKSPACE -DCMAKE_BUILD_TYPE=Release \
&& cmake --build . --parallel 4
# ============================== FINAL RUNNER STAGE ==============================
FROM BASE_IMAGE AS FINAL_RUNNER
WORKDIR /test
COPY tests/pcaps/OS-2-32-U0_v2.0.0_1024x10.pcap .
COPY --from=BUILD_TESTER_W_DEV /root/build/pcap_test ./pcap_test_with_dev_scripts
COPY --from=BUILD_TESTER_WO_DEV /root/build/pcap_test ./pcap_test_without_dev_scripts
CMD echo "--- RUNNING TEST BUILT WITH DEV SCRIPTS ---" \
&& ./pcap_test_with_dev_scripts ./OS-2-32-U0_v2.0.0_1024x10.pcap \
&& echo "\n--- RUNNING TEST BUILT WITHOUT DEV SCRIPTS ---" \
&& ./pcap_test_without_dev_scripts ./OS-2-32-U0_v2.0.0_1024x10.pcap