gstreamer编译recipe插件

(1)创建一个 test.recipe:

# -*- Mode: Python -*- vi:si:et:sw=4:sts=4:ts=4:syntax=python
import shutil
from cerbero.utils import messages as m

class Recipe(recipe.Recipe):

    name = 'test'
    version = '1.0'
    btype = BuildType.MAKEFILE

    files_libs = ['libtest']

    def prepare(self):
        if self.config.target_platform == Platform.WINDOWS:
            system = 'mingw'
        elif self.config.target_platform in [Platform.DARWIN, Platform.IOS]:
            system = 'darwin'
        elif self.config.target_platform in [Platform.LINUX, Platform.ANDROID]:
            system = 'posix'
        # LDFLAGS are passed via XLDFLAGS, and are needed for at least Android
        cc = self.get_env('CXX')
        # CXX clang++用于编译cpp / CC clang+用于编译 c
        ld = self.get_env('LD')
        pg = self.get_env('PKG_CONFIG')
        prefix = self.config.prefix
        cflags = self.get_env('CXXFLAGS')
        # CXXFLAGS 用于cpp / CFLAGS 用于c 
        ldflags = self.get_env('LDFLAGS')
        self.make += ['SYS=' + system, 'prefix=' + prefix, 'XCFLAGS=' + cflags,'PKG_CONFIG=' + pg,
                      'XLDFLAGS=' + ldflags, 'CC=' + cc, 'LD=' + ld]
        self.make_install = self.make + ['install']

       # m.message("debug test ==== %s" % self.make)
    async def install(self):
            library_path = os.path.join(self.config.prefix, 'lib')
            out_lib = os.path.join(self.make_dir, 'libtest.so')
            shutil.copy(out_lib, library_path)

(2) 创建插件源码目录test-1.0 :  Makefile  test.c

BIN=libtest.so

CC?=$(CROSS_COMPILE)gcc
LD?=$(CROSS_COMPILE)ld
AR?=$(CROSS_COMPILE)ar
#CFLAGS = -shared -fPIC
LIBS=

CFLAGS=-Wall $(XCFLAGS) -fPIC 
LDFLAGS=$(XLDFLAGS) -shared -Wl,-soname,$@
INCS=-I./include/ #头文件目录
SRCS:=$(wildcard *.cpp) #.c文件目录
COBJS:=$(SRCS:.cpp=.o)
all:$(BIN)

PKG?=$(PKG_CONFIG)
LIB_GST = `$(PKG)  --cflags --libs gstreamer-1.0`
CFLAGS += $(LIB_GST)
#引用了gst.h头文件

$(COBJS) : %.o: %.cpp
	$(CC) -c $< -o $@ $(INCS) $(CFLAGS)

$(BIN):$(COBJS)
	$(CC) -o $(BIN) $(COBJS) ${LDFLAGS} $(LIBS) $(CFLAGS) 

clean:
	rm $(BIN) $(COBJS)
	
distclean:clean

install:$(BIN)
	@echo "begin install "$(BIN)
.PYHONY:install

 test.cpp

#include <stdio.h>
#include <gst/gst.h>
#include <libavcodec/avcodec.h>
extern "C" int test()
{
	return 10;
}


(4)编译插件

(因为依赖了gst.h/avcodec.h,所以需要先整体编译一遍才会在dist下生成相关头文件/依赖库/*.pc)

单独编译插件:

./cerbero-uninstalled -c config/cross-android-x86-64.cbc  build  test

说明:

可以看完整编译命令,编译工具CC/CXX/PKG_CONFIG等,cebero已经默认添加到了env中,包括pkg-config寻找pc的路径也设置到了env(通过打印self.env),同时相关头文件等依赖也添加到了make中, -isystem -isysroot等。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值