carla/Examples/CppClient
Néstor Subirón b45f7c5f95 Allow compiling client-side with GCC (#2056)
* Allow compiling client-side with GCC

* Merge branch 'master' into nsubiron/gcc
2019-09-06 17:04:54 +02:00
..
.gitignore Add C++ client example 2019-04-24 17:37:21 +02:00
Makefile Allow compiling client-side with GCC (#2056) 2019-09-06 17:04:54 +02:00
README.md Upgrade to Unreal Engine 4.22 and clang 7 2019-05-03 12:53:43 +02:00
main.cpp Rename frame_count and frame_number as frame 2019-06-28 14:05:00 +02:00

README.md

C++ Client Example

This example creates an application using CARLA's C++ API to connect and control the simulator from C++.

Compile and run

Use the Makefile provided (Linux only), to compile and run the example. Note that it expects to have a simulator running at port 2000.

make run

How it works

In order to link our application against LibCarla, we need to compile LibCarla with the same compiler and configuration we are using with our application. To do so, we generate a CMake tool-chain file specifying the compiler and flags we want

# Example ToolChain.cmake
set(CMAKE_C_COMPILER /usr/bin/clang-7)
set(CMAKE_CXX_COMPILER /usr/bin/clang++-7)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -O3 -DNDEBUG" CACHE STRING "" FORCE)

We pass this file to CMake when compiling LibCarla.client

cd /path/to/carla-root-folder

make setup

cd /path/to/build-folder

cmake \
    -G "Ninja" \
    -DCMAKE_BUILD_TYPE=Client \
    -DLIBCARLA_BUILD_RELEASE=ON \
    -DLIBCARLA_BUILD_DEBUG=OFF \
    -DLIBCARLA_BUILD_TEST=OFF \
    -DCMAKE_TOOLCHAIN_FILE=/path/to/ToolChain.cmake \
    -DCMAKE_INSTALL_PREFIX=/path/to/install-folder \
    /path/to/carla-root-folder

ninja
ninja install

This will generate the following structure at the provided install path

libcarla-install/
├── include/
│   ├── carla/
│   ├── boost/
│   ├── rpc/
│   └── ...
└── lib/
    ├── libcarla_client.a
    ├── librpc.a
    ├── libboost_filesystem.a
    └── ...

Our application needs to be linked at minimum against libcarla_client.a and librpc.a. If we make use of IO functionality and/or image processing we would need to link against boost_filesystem, png, tiff, and/or jpeg.

For more details take a look at the Makefile provided.