Linux内核SDK中纳入库源码方法
概述:要把库源码纳入SDK中,需要自己写makefile(注意:“m”是小写),这个makefile完成linux下安装源码的“三步走”步骤(./configure;make;make install;),主要是这个makefile的书写。
EG:移植libmad库到RT288X_SDK中
1) 拷贝库源码到SDK目录中
#cplibmad xxx/source/lib
2) 添加makefile文件,我的makefile例子
TOPDIR=../
include $(TOPDIR)Rules.mak
CONFOPTS= --host=mipsel-linux
LIB_LDFLAGS := $(subst -z defs,,$(LDFLAGS))
# libmad
LIBMAD_A= .libs/libmad.a
LIBMAD_SHARED=libmad.so
LIBMAD_SHARED_FULLNAME=libmad-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so
all: Makefile
make -f Makefile all
Makefile:
AR= AS= CC=$(CROSS_COMPILE)gcc CFLAGS= CROSS= CROSS_COMPILE= CXX= HOSTCC= LD=$(CONFIG_CROSS_COMPILER_PATH)/mipsel-linux-ld OBJCOPY= RANLIB= STRIP= GCC_DIR= ./configure $(CONFOPTS)
# CC="/opt/buildroot-gdb/bin/mipsel-linux-uclibc-gcc" ./configure $(CONFOPTS)
# the is a proxy section --YY
all-recursive: Makefile
make -f Makefile all-recursive
# the is a proxy section --YY
all-am: Makefile
make -f Makefile all-am
# the is a proxy section --YY
clean-am: Makefile
make -f Makefile clean-am
clean: Makefile
rm -rf *.so *.a
make -f Makefile clean
find ./ -name Makefile -exec rm -f {} \;
romfs:
shared: all
$(LD) $(LIB_LDFLAGS) -soname=$(LIBMAD_SHARED).$(MAJOR_VERSION) \
-o $(LIBMAD_SHARED_FULLNAME) --whole-archive $(LIBMAD_A) \
--no-whole-archive $(TOPDIR)libc/misc/internals/interp.o \
-L$(TOPDIR)lib -lc $(LDADD_LIBFLOAT) $(LIBGCC);
$(INSTALL) -d $(TOPDIR)lib
$(RM) $(TOPDIR)lib/$(LIBMAD_SHARED_FULLNAME) $(TOPDIR)lib/$(LIBMAD_SHARED).$(MAJOR_VERSION)
$(INSTALL) -m 644 $(LIBMAD_SHARED_FULLNAME) $(TOPDIR)lib
$(INSTALL) -m 644 $(LIBMAD_A) $(TOPDIR)lib
$(LN) -sf $(LIBMAD_SHARED_FULLNAME) $(TOPDIR)lib/$(LIBMAD_SHARED)
$(LN) -sf $(LIBMAD_SHARED_FULLNAME) $(TOPDIR)lib/$(LIBMAD_SHARED).$(MAJOR_VERSION)
3) 修改lib目录下的Makefile,添加如下类似内容
ifeq($(CONFIG_LIB_LIBMAD_FORCE),y)
DIRS+= libmad
endif
ifeq($(CONFIG_LIB_LIBMAD_FORCE),y)
@$(MAKE)-C libmad shared
endif
4) 修改source/config/config.in
bool'Build libmad' CONFIG_LIB_LIBMAD_FORCE
5) 配置
make menuconfig
6) 编译库
#makedep
#makelib_only