Building dynamic libraries

When building dynamic libraries, you must use a toolchain that supports dynamic linking.

To build a dynamic library, you need to use the following CMake command:

add_library(<build target name> SHARED [list of paths to files of the library source code])

Use of this CMake command results in an error if the toolchain does not support dynamic linking.

You can also build a dynamic library by using the following CMake command:

add_library(<build target name> [list of paths to files of the library source code])

The cmake shell command must be called with the -D BUILD_SHARED_LIBS=YES parameter. (If the cmake shell command is called without the -D BUILD_SHARED_LIBS=YES parameter, a static library will be built.)

Example:

#!/bin/bash

...

cmake -G "Unix Makefiles" \

-D CMAKE_BUILD_TYPE:STRING=Debug \

-D CMAKE_TOOLCHAIN_FILE=$SDK_PREFIX/toolchain/share/toolchain-$TARGET.cmake \

-D BUILD_SHARED_LIBS=YES \

-B build \

&& cmake --build build --target kos-image

By default, the library file name matches the name of the build target defined via the parameter of the CMake add_library() command. The library file name can be changed by using the CMake set_target_properties() command. This can be done to make the library file name identical for its dynamic and static variants.

Example:

# Build the static library

add_library(somelib_static STATIC src/somesrc.cpp)

set_target_properties(somelib_static PROPERTIES OUTPUT_NAME "somelib")

# The PLATFORM_SUPPORTS_DYNAMIC_LINKING variable has the

# value "true" when using dynamic

# linking. If initialize_platform(FORCE_STATIC) is called,

# this variable has the value "false".

if(PLATFORM_SUPPORTS_DYNAMIC_LINKING)

# Build the dynamic library

add_library(somelib_shared SHARED src/somesrc.cpp)

set_target_properties(somelib_shared PROPERTIES OUTPUT_NAME "somelib")

endif()

A dynamic library can be linked to other static and dynamic libraries by using the CMake target_link_libraries() command. In this case, static libraries must be built with the -fPIC flag. This flag is applied when building a static library if the following CMake command is used:

set_property(TARGET <list of names of build targets> PROPERTY POSITION_INDEPENDENT_CODE ON)

Page top