c和cpp 混合的动态库生成:

$(LIBSO): $(COBJS) $(CPPOBJS) 
$(CPP) -shared -o $@ $^ $(LIBS)

//////////////////////////////////////////////////////////////////////////////

#for multchannel decoder makefile by pkf
BIN = client_system

BASE_INSTALL_DIR := /opt/arm-2009q1

BUILD_TOOL_DIR := $(BASE_INSTALL_DIR)

BUILD_TOOL_PREFIX := $(BUILD_TOOL_DIR)/bin/arm-none-linux-gnueabi-

CC = $(BUILD_TOOL_PREFIX)gcc

CPP = $(BUILD_TOOL_PREFIX)c++

LIBSO = librtspclient.so

INCS =

LIBS = -lpthread

SUBDIRS =

DEFINC = -I"./BasicUsageEnvironment/include" -I"./groupsock/include" -I"./liveMedia/include" \

-I"./UsageEnvironment/include"

#-I"./myclient"

INC_DIR := UsageEnvironment BasicUsageEnvironment liveMedia groupsock

INC := $(patsubst %,-I%/include,$(INC_DIR))

#CFLAGS := $(INC) -Wall -I $(KDIR)/include -DBSD=1 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -lpthread -I./ -g3 -O3

CSRCS = $(wildcard ./*.c ./BasicUsageEnvironment/*.c ./groupsock/*.c ./liveMedia/*.c \

./UsageEnvironment/*.c ./myclient/*.c)

CPPSRCS = $(wildcard ./*.cpp ./BasicUsageEnvironment/*.cpp ./groupsock/*.cpp ./liveMedia/*.cpp \

./UsageEnvironment/*.cpp ./myclient/*.cpp)

COBJS := $(CSRCS:.c=.o)

CPPOBJS := $(CPPSRCS:.cpp=.o)

MAKEDEPEND = gcc -MM -MT

CFLAGS = -O2 -Wall -DBSD=1 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64

CPPFLAGS = -O2 -Wall -DBSD=1 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64

CDEF = $(CSRCS:.c=.d)

CPPDEF = $(CPPSRCS:.cpp=.d)

PLATS = win32-debug win32-release linux-debug linux-release

none:

@echo "Please choose a platform"

@echo $(PLATS)

win32-debug:

$(MAKE) all INCS=-I"c:/mingw/include" LIBS="-L"c:/mingw/lib" -L"./../../lib/lxnet" -llxnet -lws2_32 -L"./../../lib/tinyxml" -ltinyxml" CFLAGS="-Wall -DWIN32 -DDEBUG -g" CPPFLAGS="-Wall -DWIN32 -DDEBUG -g"

win32-release:

$(MAKE) all INCS=-I"c:/mingw/include" LIBS="-L"c:/mingw/lib" -L"./../../lib/lxnet" -llxnet -lws2_32 -L"./../../lib/tinyxml" -ltinyxml" CFLAGS="-Wall -DWIN32 -DNDEBUG -O2" CPPFLAGS="-Wall -DWIN32 -DNDEBUG -O2"

linux-debug:

$(MAKE) all -lpthread CFLAGS="-Wall -DDEBUG -g" CPPFLAGS="-Wall -DDEBUG -g"

linux-release:

$(MAKE) all -lpthread CFLAGS="-Wall -DNDEBUG -O2" CPPFLAGS="-Wall -DNDEBUG -O2 -DBSD=1 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64"

all:$(BIN) fsupdate

lib:$(LIBSO) fsupdate

$(CDEF) : %.d : %.c

$(MAKEDEPEND) $(<:.c=.o) $< $(DEFINC) > $@

$(CPPDEF) : %.d : %.cpp

$(MAKEDEPEND) $(<:.cpp=.o) $< $(DEFINC) > $@

depend:

-rm $(CDEF)

-rm $(CPPDEF)

$(MAKE) $(CDEF)

$(MAKE) $(CPPDEF)

$(COBJS) : %.o: %.c

$(CC) -c $< -o $@ $(INCS) $(DEFINC) $(CFLAGS)

$(CPPOBJS) : %.o: %.cpp

$(CPP) -c $< -o $@ $(INCS) $(DEFINC) $(CPPFLAGS)

$(BIN) : $(COBJS) $(CPPOBJS)

$(CPP) -o $(BIN) $(COBJS) $(CPPOBJS) $(LIBS)

-rm $(COBJS) $(CPPOBJS)

$(LIBSO): $(COBJS) $(CPPOBJS)

$(CPP) -shared -o $@ $^ $(LIBS)

fsupdate:

# cp $(LIBSO) ../../../tirvideo_sdk/bell_lyb/rdk/demos/link_api_test_demos/linkapi

cp $(LIBSO) /home/tirvideo/lyb/armfs/opt/dvr_rdk/ti814x

# cp $(BIN) /home/tirvideo/lyb/armfs/opt/dvr_rdk/ti814x

.PHONY:clean cleanall

clean:

-rm $(BIN) $(COBJS) $(CPPOBJS) $(LIBSO)

-rm *.d

-rm *.obj

-rm *.o

-rm *.dep

-rm *.dep *.obj *.d

静态库的生成:

$(TargetLib): $(Cobjects)
$(AR) -rcs $(TargetLib) $^ 
# ar rcs ruv $(TargetLib) $^

/////////////////////////////////////////////////////////
Target = TestIni
TargetLib = inilib.a

BASE_INSTALL_DIR := /opt/arm-2009q1
BUILD_TOOL_DIR := $(BASE_INSTALL_DIR)
BUILD_TOOL_PREFIX := $(BUILD_TOOL_DIR)/bin/arm-none-linux-gnueabi-
AR := $(BUILD_TOOL_DIR)/bin/arm-none-linux-gnueabi-ar

GCC = $(BUILD_TOOL_PREFIX)gcc
G++ = $(BUILD_TOOL_PREFIX)g++

CInc = $(wildcard *.h)
CSrc = $(wildcard *.c)

Cobjects =$(CSrc:%.c=%.o)

$(Cobjects) : %.o: %.c

$(GCC) -c $< -o $@
#$(INCS) $(DEFINC) $(CFLAGS)
#Cobjects =$(patsubst %.c,%.o,$(CSrc))

lib:$(TargetLib)

release:$(Target)

$(Target): $(Cobjects)
echo $(GCC)
$(GCC) -o $@ $^

$(TargetLib): $(Cobjects)
$(AR) -rcs $(TargetLib) $^
# ar rcs ruv $(TargetLib) $^

##################test######################

#CInc += iniparser.h dictionary.h
#CSrc += iniparser.c dictionary.c
#Cobjects += iniparser.o dictionary.o
#CppObejects =
#$(Cobjects):$(Csrc)
# $(GCC) $(CInc) -c $<

#$(Target): iniparser.o dictionary.o
# $(GCC) -o $@ $^

#iniparser.o: iniparser.c
# $(GCC) $(CInc) -c $<
#dictionary.o: dictionary.c
# $(GCC) $(CInc) -c $<

clean:
rm -rf *.o $(Target) *.gch

值得注意的是在ubuntu上位机的编译

Cobjects =$(CSrc:%.c=%.o)

这一句就可以了,系统默认是cc编译即gcc

但是如果放在嵌入式下位机用的话就得加上下面这句话

$(Cobjects) : %.o: %.c 
$(GCC) -c $< -o $@

静态库的调用:

#for makefile web module by pkf
.SUFFIXES:
.SUFFIXES: .o .c
.PHONY: clean mrclean distclean depend all dist

INSTALLDIR = $(EXEC_DIR)

GCC_FLAGS = -Wstrict-prototypes -Wpointer-arith -Wcast-align -Wcast-qual\
-Wtraditional\
-Wshadow\
-Wconversion\
-Waggregate-return\
-Wmissing-prototypes\
-Wnested-externs\
-Wall \
-Wundef -Wwrite-strings -Wredundant-decls -Winline \
-mshort-calls

BASE_INSTALL_DIR := /opt/arm-2009q1
BUILD_TOOL_DIR := $(BASE_INSTALL_DIR)
BUILD_TOOL_PREFIX := $(BUILD_TOOL_DIR)/bin/arm-none-linux-gnueabi-

srcdir = .

LDFLAGS = -g -lpthread -ldl
LIBS =

CFLAGS = -O3 -pipe -Wall

CFLAGS += -I./cgi.h

LEX = flex
CC = $(BUILD_TOOL_PREFIX)gcc
CPP = $(BUILD_TOOL_PREFIX)gcc -E

SOURCES = data_process.c data_update.c server_api.c net_config.c
USOURCES = upload.c cgic.c

OBJS =$(SOURCES:.c=.o)
UOBJS =$(USOURCES:.c=.o)

all: data_update.cgi upload.cgi fsupdate

install: data_update.cgi
install data_update.cgi $(INSTALLDIR)
# make fsupdate

data_update.cgi: $(OBJS) $(LIBS)
$(CC) -o $@ $^ -L. inilib.a $(LDFLAGS) $(CFLAGS)

upload.cgi: $(UOBJS) $(LIBS)
$(CC) -o $@ $^ $(LDFLAGS) $(CFLAGS)

clean:
rm -f $(OBJS) $(UOBJS) data_update.cgi upload.cgi

fsupdate:
@echo "--------------------------------------------------------------"
@echo "| !!!!!!!!!!!!!!<file update sucess>!!!!!!!!!!!!! |"
@echo "--------------------------------------------------------------"

cp *.html /home/tirvideo/lyb/armfs/var/www/
cp *.txt /home/tirvideo/lyb/armfs/var/www/
cp ./*.cgi /home/tirvideo/lyb/armfs/var/www/cgi-bin/
chmod 777 /home/tirvideo/lyb/armfs/var/www/*.html
chmod 777 /home/tirvideo/lyb/armfs/var/www/cgi-bin/*.cgi

distclean: mrclean

mrclean: clean
rm -f config.status Makefile config.log

.depend:
$(CPP) -MM $(SOURCES) > .depend

depend:
-rm -f .depend
$(MAKE) .depend

include .depend

# tags
tags: $(SOURCES)
ctags -o tags $^ *.h

# dist
dist:
$(MAKE) clean
./makedist.sh

# object dump
boa.objdump: data_update.cgi
objdump --disassemble-all --source data_update.cgi > $@

http://www.cnblogs.com/zhoujg/p/5054122.html

嵌入式开发之makefile---交叉编译静态库和动态库的生成和调用的更多相关文章

  1. Makefile中静态库,动态库的创建和使用以及解压缩命令

    应用层通过操作文件操控硬件 使用制作好的工具链: 刚开始学习时,用一些已经制作好的工具链,使用以下命令解压到gcc-3.4.5-glibc-2.3.6目录 cd /work/tools tar xjf ...

  2. Ubuntu下通过makefile生成静态库和动态库简单实例

    本文转自http://blog.csdn.net/fengbingchun/article/details/17994489 Ubuntu环境:14.04 首先创建一个test_makefile_gc ...

  3. makefile生成静态库和动态库

    库是一种软件组件技术,库里面封装了数据和函数. 库的使用可以使程序模块化. Windows系统包括静态链接库(.lib文件)和动态链接库(.dll文件). Linux通常把库文件存放在/usr/lib ...

  4. C++ 系列:静态库与动态库

    转载自http://www.cnblogs.com/skynet/p/3372855.html 这次分享的宗旨是——让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择 ...

  5. C++静态库与动态库

    C++静态库与动态库 这次分享的宗旨是--让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择.这里不深入介绍静态库.动态库的底层格式,内存布局等,有兴趣的同学,推荐一 ...

  6. 在Linux下如何使用GCC编译程序、简单生成 静态库及动态库

      最近在编写的一个Apache  kafka 的C/C++客户端,,在看他写的 example中,他的编译是用librdkafka++.a和librdkafka.a    静态库编译的,,,而我们这 ...

  7. android开发 NDK 编译和使用静态库、动态库 (转)

    在eclipse工程目录下建立一个jni的文件夹 在jni文件夹中建立Android.mk和Application.mk文件 Android.mk文件: Android提供的一种makefile文件, ...

  8. [转]Linux下用gcc/g++生成静态库和动态库(Z)

    Linux下用gcc/g++生成静态库和动态库(Z) 2012-07-24 16:45:10|  分类: linux |  标签:链接库  linux  g++  gcc  |举报|字号 订阅     ...

  9. C 高级编程3 静态库与动态库

    http://blog.csdn.net/Lux_Veritas/article/details/11934083http://www.cnblogs.com/catch/p/3857964.html ...

  10. (转)C++静态库与动态库

    转自:http://www.cnblogs.com/skynet/p/3372855.html C++静态库与动态库 这次分享的宗旨是——让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别, ...

随机推荐

  1. Android,XML解析

    XML解析三种方式 DOM 通用性强,它会将XML文件的所有内容读取到内存中,然后允许您使用DOM API遍历XML树.检索所需的数据: 简单直观,但需要将文档读取到内存,并不太适合移动设备: SAX ...

  2. 普通用户无法su到root用户

    问题描述: 普通用户切换回root用户时,密码输入正确仍然报密码错误. 问题解决: 1.1 检查/etc目录下passwd的权限 [root@dev /]# ll/etc/passwd-rw-r--r ...

  3. 在windows下nginx+django+flup python3

    1.安装python 下载最新的python版本,在本文撰写时为 python 3.4, 下载地址:https://www.python.org/ftp/python/3.4.0/python-3.4 ...

  4. 基于Keepalived实现LVS双主高可用集群

    Reference:  https://mp.weixin.qq.com/s?src=3&timestamp=1512896424&ver=1&signature=L1C7us ...

  5. How To Set Up SSH Keys

    How To Set Up SSH Keys.https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2

  6. logrotate 日志轮询(转存)

    1.建立/etc/logrotate.d/nginx文件[1] vim /etc/logrotate.d/nginx 2.写入如下内容: /var/log/nginx/*log { daily rot ...

  7. RabbitMQ中各种消息类型如何处理?

    一:消息类型 Map String(含json字符串类型) 二:处理方法 2.1 Map消息 如果发送的消息类型是map类型,可以通过SerializationUtils.deserialize方法将 ...

  8. 基于jquery判断浏览器版本过低代码

    基于jquery判断浏览器版本过低代码.这是一款对不支持HTML5跟CSS3代码的浏览器提示用户更换特效代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div sty ...

  9. 我的zsh简单设置

    bash用久了,有些地方开始觉得不爽,于是想看看有没有更好的选择.原来在网上瞎逛时,已经很多次看到有人推荐zsh了,加上zsh高度兼容bash,于是就来折腾这个. 不过试验了一下oh-my-zsh,感 ...

  10. C语言 · 数组排序去重

    算法训练 数组排序去重   时间限制:1.0s   内存限制:512.0MB        问题描述 输入10个整数组成的序列,要求对其进行升序排序,并去掉重复元素. 输入格式 10个整数. 输出格式 ...