yocto 应用程序调用封装so库

在yocto上写了一个gpio控制的程序封装成so库,生成.c,.h 并通过makefile管理
LIBS:= -L/${D}${libdir} -lgpioctrl -ldl

SOURCES = gpio_ctrl_test.c
OBJS = $(patsubst %.c, %.o, $(SOURCES))
TARGET = gpio_ctrl_test

all:
    $(CC) ${CFLAGS}  $(LIBS) $(SOURCES) -o $(TARGET) 

clean: 
    rm -f $(OBJS) $(TARGET) 
~

注意这个LIBS 不要直接定义成  -L/usr/lib 这样编译的时候会去pc主机 pc端的/usr/lib/搜索so库,而这个${D}${libdir}是开发板定义的板端环境变量,就会去板端的/usr/lib/寻找,如果这个so放置到/usr/lib/ 或是/lib/目录 ,-L 路径可以省略,因为/lib与、/usr/lib/是linux系统标准路径库,系统默认去这里搜索so文件,如果是其他路径就需要 -L后面接具体的路径了

否则会报错误   

The compile log indicates that host include and/or library paths were used. 

而so共享库的封装也是通过makefile管理

SOURCES = $(wildcard *.c) 
OBJS = $(patsubst %.c, %.o, $(SOURCES))
CFLAGS := -Wall -O3 
 
LIB = libgpioctrl.so
all: $(LIB)
 
$(OBJS): $(SOURCES)
    $(CC) $(CFLAGS)   -fpic -c $< -o $@ 
 
$(LIB): $(OBJS)
    rm -f $@ 
    $(CC) $(CFLAGS) -shared -o $@ $(OBJS) 
    rm -f $(OBJS)


clean: 
    rm -f $(OBJS) $(TARGET) $(LIB)
 注意参数 -fpic 与 shared,这个是生成共享库的标配

然后就是yocto的bb文件了

DESCRIPTION = "gpio ctrl libs"
SECTION = "libs"
PV = "3" 
PR = "0" 
PN = "gpio_ctrl"

LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

SRC_URI = " \ 
          file://gpio_ctrl.c \
          file://gpio_ctrl.h \
          file://makefile \
          "   

S = "${WORKDIR}"
do_compile () {
    make
}

do_install () {
    install -d ${D}/usr/lib
    cp ${WORKDIR}/libgpioctrl.so ${WORKDIR}/libgpioctrl.so.${PR}
    install -m 0755 ${WORKDIR}/libgpioctrl.so ${D}/usr/lib
    install -m 0755 ${WORKDIR}/libgpioctrl.so.${PR} ${D}/usr/lib
    cd ${D}/usr/lib/
#   ln -sf libgpioctrl.so.${PR} libgpioctrl.so
    ln -sf libgpioctrl.so libgpioctrl.so.${PR} 
    install -d ${D}/usr/include
    install -m 0644 ${WORKDIR}/gpio_ctrl.h ${D}/usr/include/
}

FILES_${PN} += "${libdir}/*.so"
FILES_${PN}-dbg += "${libdir}/.debug"
FILES_SOLIBSDEV = ""
INSANE_SKIP_${PN} = "dev-so"

QA Issue: gpio_ctrl: Files/directories were installed but not shipped in any package:

这个是需要在.bb配置文件中添加FILES_${PN} += "${libdir}/*.so"代码即可

添加一个新的配置文件夹之后,包含有bb配置菜单,执行bitbake gpio_ctrl,报ERROR: Nothing PROVIDES 'gpio_ctrl'

这时需要在bb配置菜单中添加:PN = "gpio_ctrl" 即可

更新defconfig文件:

file://custom_defconfig \
"
do_copy_defconfig_append () {
    cp ${WORKDIR}/custom_defconfig ${WORKDIR}/defconfig    
    cp ${WORKDIR}/custom_defconfig ${WORKDIR}/build/.config
}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值