Apache Celix  2.3.0
An implementation of the OSGi specification adapted to C and C++
Apache Celix Documentation

Intro

The main way to use Celix is through the bundle context of a bundle. When a bundle is started the bundle context will be injected in the bundle activator.

Apache Celix is a C framework with a C and C++ (C++11) API.

C Bundle Activator

#include <celix_api.h>
typedef struct activator_data {
/*intentional empty*/
} activator_data_t;
static celix_status_t activator_start(activator_data_t *data, celix_bundle_context_t *ctx) {
//use the bundle context ctx to activate the bundle
return CELIX_SUCCESS;
}
static celix_status_t activator_stop(activator_data_t *data, celix_bundle_context_t *ctx) {
//use the bundle context ctx to cleanup
return CELIX_SUCCESS;
}
CELIX_GEN_BUNDLE_ACTIVATOR(activator_data_t, activator_start, activator_stop)

C++ Bundle Activator

#include <celix/BundleActivator.h>
class MyBundleActivator {
public:
explicit MyBundleActivator(const std::shared_ptr<celix::BundleContext>& ctx) {
//use the bundle context ctx to activate the bundle
}
};
CELIX_GEN_CXX_BUNDLE_ACTIVATOR(MyBundleActivator)

C API

See include/celix_bundle_context.h as a starting point for the C API.

C++ API

See celix::BundleContext as a starting point for the C++ API.