Celix, OSGi in C

Celix项目旨在使用C语言实现OSGi规范,面对C语言与Java的差异,项目采用了一系列创新方法,例如利用包含函数指针的结构体来替代Java中的接口,并通过ZIP格式打包库文件及资源来模拟OSGi的bundle。此外,还定义了宏来表示包的导出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

celix的目标是用C来实现OSGi规范,原生OSGi是用Java实现的,虽然概念上没有差别,但是c语言实现起来相对会更难一些。参考原生的Java版本OSGi,C语言版本OSGi需要解决如下问题:

    服务接口(Service Interfaces)

    原生OSGi使用Java接口类(Interface)来描述和开放(expose)接口,这样就可以不用开放服务实现的细节。C语言中可以在头文件中描述服务,但是,却不能开放服务接口。为达到Java Interface类似的功能,定义了一个包含函数指针的结构体,其中指针由激活器(Activator)来初始化,然后结构体对象被当做服务来进行注册。

    部署(Deployment)

    原生OSGi使用bundle(实际上就是jar文件)来部署一个或多个服务。bundle中包含了库(library)、资源(resource)和一个manifest文件(用来描述bundle的内容)。但是在C的库中只包含源码编译出来的目标文件(objects),没发加入资源和manifest文件。为在C中实现bundle类似文件,使用zip压缩方式,对库、资源等文件进行打包。


    导出包(Exported Packages)

原生OSGi使用包(package)来导出服务和类型。由于C中没有包和命名空间(namespace)的概念,也就没发通过一个包来导出一组服务。C语言中额外定义了一些宏定义来表示包的导出。    



*参考链接*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值