使用Xenomai创建动态链接库
项目中需要Xenomai创建实时周期的任务,并封装为动态链接库,这里记录下遇到的问题。
按照 QT编译xenomai用户层程序 中的步骤设置,建立好动态库工程之后。
编译,会发生如下错误:
:-1: error: /usr/xenomai/lib/xenomai/bootstrap.o: relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
提示编译动态库的时候需要加 -fPIC标志,添加如下:
XCFLAGS = $(shell $$XENO_CONFIG -fPIC --skin=alchemy --cflags)
XLDFLAGS = $(shell $$XENO_CONFIG -fPIC --skin=alchemy --ldflags)
编译通过,运行动态链接库,又发生下面的错误:
Segmentation fault(core dumped)
发生了堆栈溢出。
幸好在Xenomai论坛中有人碰到同样的问题,
Cannot create a share library linked against Xenomai libs
按照里面的描述,参考官方文档:
--auto-init-solib
This switch enables the auto-initialization feature described above for a shared library target instead of a pure executable. The main difference resides in a position-independent (PIC) glue code being used for bootstrapping the initialization.
在编译参数中添加 --auto-init-solib 标志
XCFLAGS = $(shell $$XENO_CONFIG --skin=alchemy --auto-init-solib --cflags)
XLDFLAGS = $(shell $$XENO_CONFIG --skin=alchemy --auto-init-solib --ldflags)
再次运行,成功!
评论(0)
您还未登录,请登录后发表或查看评论