OPENWRT+中添加动态库和静态库.so和.a
来源:互联网 发布:淘宝可以实名认证几个 编辑:程序博客网 时间:2024/05/22 14:21
有的时候,需要在openwrt工程中添加这样或者那样的库。例如静态库和动态库
然后其他模块会调用它们。
现在记录下分别创建动态库和静态库的方法.
前面已经讲过了,在openwrt 中添加工程的方法。这里方法类似.
首先,创建Makefile和src文件夹。并将自已的源码放入。
然后修改Makefile
现帖出外层(供openwrt 使用的Makefile和内供源码使用的Makefile)
include $(TOPDIR)/rules.mk
PKG_NAME:=libcusflash --库的名称
PKG_RELEASE:=1
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) --一些定义条件,根据自已的要求,添加,非必要
PKG_KCONFIG:=RALINK_MT7620 RALINK_MT7621 RALINK_MT7628
PKG_CONFIG_DEPENDS:=$(foreach c, $(PKG_KCONFIG),$(if $(CONFIG_$c),CONFIG_$(c)))
include $(INCLUDE_DIR)/package.mk -包含规则
include $(INCLUDE_DIR)/kernel.mk
define Package/libcusflash
SECTION:=MTK Properties 下面这两个就是openwrt中的make menuconfig出来后,各个选项条目了。它是根据所有Makefile中的此处生成的。
CATEGORY:=MTK Properties
TITLE:=Custom cusflash library --注解
SUBMENU:=Appcustom --子选面。意为在CATEGORY下面的子目录。即:MTK Properties->Appcustom->libcusflash
endef
define Package/libcusflash/description --此处非必要,为了保持格式一致
Custom cusflash library
endef
define Build/Prepare --将源码copy到编译路径。即build_dir/target-XXXXX/下面,进行编译
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./src/* $(PKG_BUILD_DIR)/
endef
TARGET_CFLAGS += \
$(foreach c, $(PKG_KCONFIG),$(if $(CONFIG_$c),-DCONFIG_$(c))) --添加CFLAGS
define Build/Configure
endef
define Build/InstallDev --此处,是安装动态库的环镜。它会将生成的头文件和库,copy到staging_dir\target-mipsel_24kec+dsp_uClibc-0.9.33.2\ 此级目录下。此处是给后续需要它的库指明路径。如果你的工程中会用到这个库,则需要添加头文件路径,即这个路径
mkdir -p $(1)/usr/include
$(CP) $(PKG_BUILD_DIR)/libcusflash.h $(1)/usr/include/
mkdir -p $(1)/usr/lib
$(CP) $(PKG_BUILD_DIR)/lib*.so $(1)/usr/lib/
endef
define Package/libcusflash/install --将生成的库文件,copy到文件系统对应的目录下。即板子上面的/usr/lib 中
$(INSTALL_DIR) $(1)/usr/lib
$(INSTALL_BIN) $(PKG_BUILD_DIR)/*.so $(1)/usr/lib
endef
$(eval $(call BuildPackage,libcusflash))
上面这个就是外层openwrt的Makefile 。下面贴一下内层源码的Makefile
EXEC = libcusflash.so --目标
SRC = libcusflash.c libanalysis.c
CFLAGS += -fPIC
LDFLAGS += -shared --动态库编译选项
all: $(EXEC) --目标及规则
$(EXEC): $(SRC)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(SRC) $(LDLIBS)
clean:
-rm -f $(EXEC) *.elf *.gdb *.o *.so
以上为动态库的Makefile .静态库的外层Makefile和动态库的一样。照般就是了。
内层源码Makefile稍有不同:去掉-shared选项,并将.c编译成.o过行链接就OK了。
EXEC = libcusat.a
OBJS=cusat_tok.o
CFLAGS += -fPIC -c -Wall
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $<
$(EXEC): $(OBJS)
$(AR) curv $(EXEC) $(OBJS)
all: $(EXEC)
clean:
-rm -f $(EXEC) *.elf *.gdb *.o *.a
以上为动态库和静态库的添加方法。
如果以后,某个工程需要用到这些库的时候。则我们直接修改该工程的内外层Makefile即可.
1.外层Makefile:
define Package/opcusflash
SECTION:=MTK Properties
CATEGORY:=MTK Properties
TITLE:=Command to config opcusflash
SUBMENU:=Appcustom
DEPENDS:=+libcusflash --此处,增加库的依赖头系
endef
2.内层Makefile:
CFLAGS += -I$(STAGING_DIR)/usr/include/ --添加头文件路径(动态库非必须)
all: $(EXEC)
$(EXEC): $(SRC)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(SRC) $(LDLIBS)-lcusflash --指明要链接的库
- OPENWRT+中添加动态库和静态库.so和.a
- QT中添加 动态库(.so) 和 静态库 (.a) 的方法
- linux中静态库(.a)和动态库(.so)
- 动态库so和静态库a
- 静态库.a和动态库.so
- 在Linux中静态库.a和动态库.so 的创建和使用
- android 原生工程中集成第三方so动态库和.a静态库和apk
- gcc生成.a.so静态库和动态库文件
- gcc生成.a静态库和.so动态库文件
- 静态库*.a和动态库*.so生成及调用
- 静态库.a和动态库.so说明
- Linux下动态库(.so)和静态库(.a)
- 静态库.a和动态库.so说明
- gcc生成.a静态库和.so动态库文件
- Linux下动态库(.so)和静态库(.a)
- Linux下动态库(.so)和静态库(.a)
- gcc 生成 .a静态库和 .so动态库
- gcc生成.a静态库和.so动态库文件
- MediaCodec 编码H264 编码一帧后dequeueOutputBuffer为-1的问题
- Alibaba开源的分布式服务框架Dubbo架构图详解
- BZOJ_P4300 绝世好(sb)题(动态规划)
- 千万并发的秘密-内核是问题的根本
- 数据结构与算法——二叉搜索树的操作集(C语言)
- OPENWRT+中添加动态库和静态库.so和.a
- android真机 usb调试 访问电脑本地web服务地址
- 用Python操作Named pipe命名管道,实用做法
- tomcat笔记
- 使用HttpURLConnection发送HTTP请求
- win7 64位上Oracle11g数据库的安装,卸载,plsql的安装
- 一道简单的题目引发的思考
- SpringMVC4.2+Jackson2.6/2.7
- Spring使用Ehcache