首页 > 其他分享 >makefile生成静/动态库

makefile生成静/动态库

时间:2023-01-05 15:33:38浏览次数:45  
标签:LIB app makefile CROSS 生成 libhello export 动态 hello

通过makefile生成静态库和动态库
目录树

➜  app_hello tree -h
.
├── [ 280]  app_hello.c
├── [ 218]  app_hello.h
└── [ 997]  makefile

0 directories, 3 files

makefile

ROOT_DIR := $(shell pwd)
SRC := $(wildcard *.c)
OBJ := $(patsubst %.c,%.o,$(SRC))

export DFLAGS ?=                               # 库的链接参数
export CFLAGS ?=                               # 参数信息
export CROSS_COMPILE ?=                        # 没有定义交叉编译器时,直接用gcc


export CC := $(CROSS_COMPILE)gcc               # 编译器 按需就行
export AR = ${CROSS_COMPILE}ar
export STRIP = ${CROSS_COMPILE}strip
export AS = ${CROSS_COMPILE}as
export LD = ${CROSS_COMPILE}lr
export RANLIB = ${CROSS_COMPILE}ranlib
export NM = ${CROSS_COMPILE}nm

LIB_SO_NAME := libhello.so
LIB_REAL_NAME := libhello.so.1
LIB_A_NAME :=libhello.a



.PHONY :all clean LIB_SO LIB_A
all: LIB_SO LIB_A

LIB_A : $(OBJ)
	$(AR) r $(LIB_A_NAME) $(OBJ)

LIB_SO : $(OBJ)
	$(info $(SRC) $(OBJ))
	$(CC) $(OBJ) -shared -Wl,-soname,$(LIB_SO_NAME) -o $(LIB_REAL_NAME)

%.o : %.c
	$(CC) -fPIC -c $< -o $@ $(CFLAGS) $(DFLAGS)

clean:
	rm -rf $(OBJ)
	rm -rf $(LIB_REAL_NAME)
	rm -rf $(LIB_A_NAME)

测试

➜  app_hello make clean all
rm -rf app_hello.o
rm -rf libhello.so.1
rm -rf libhello.a
gcc                -fPIC -c app_hello.c -o app_hello.o  
app_hello.c app_hello.o
gcc                app_hello.o -shared -Wl,-soname,libhello.so -o libhello.so.1
ar r libhello.a app_hello.o
ar: creating libhello.a
➜  app_hello nm -D libhello.so.1 
                 w _ITM_deregisterTMCloneTable
                 w _ITM_registerTMCloneTable
                 w __cxa_finalize
                 w __gmon_start__
0000000000001119 T app_hello
                 U puts
➜  app_hello nm libhello.a 

app_hello.o:
                 U _GLOBAL_OFFSET_TABLE_
0000000000000000 T app_hello
                 U puts

标签:LIB,app,makefile,CROSS,生成,libhello,export,动态,hello
From: https://www.cnblogs.com/tccxy/p/17027729.html

相关文章

  • Android Studio 生成JavaDoc
    菜单位置配置GenerateJavaDocScope(生成文档的作用范围),可根据自己需求自行配置。导包若报错找不到android的某些包,可添加如下依赖(可能是由于JavaDoc没有导入An......
  • 易基因|DNA甲基化揭示肌痛性脑脊髓炎/慢性疲劳综合征在复发和恢复周期中的动态表观变化
    大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。2022年10月06日,《IntJMolSci》杂志发表题为“DynamicEpigeneticChangesduringaRelapseandRecover......
  • UGUI动态生成列表功能实现(增删保存)
    在UGUI里不免会有一些列表需要生成和显示。例如最简单的增、删、改、查等都需要列表的变化。本文只讲增、删、保存、清空UGUI配合的变化方法。下面以实现场景里角色的实时......
  • QML动态创建组件
    ​​QML中如何动态创建组件_billy的博客​​qml动态创建模型及代理中的代理_蓝博皙的博客-​​QMLListView拖拽移动,代理和模型-Cpper-C++博客​​​​20.QuickQML-F......
  • Unity3D中Resources动态加载NGUI图片
    在NGUI中有些图片我需要动态进行变更或者加载,怎么办?首先在项目中创建一个Resources目录,接着把需要的图片放在这里面,可以有子文件夹么?当然可以,文件结构很重要哦~NGUI加载图片......
  • 噩梦系列篇其他敌人制作与敌人自动生成功能
    其他的敌人制作跟我们之前所做的一样,把各种脚本添加给新的敌人素材,如下图的各种面板里的各种属性脚本等。然后把他们都做成perfabs。。。。敌人自动生成的功能很是简单。首......
  • 简单动态规划:最长上升子序列
    什么是最长上升子序列?最长上升子序列是指,从原序列中按顺序取出一些数字排在一起,这些数字是逐渐增大的,这样的序列的最长长度。引自kkksc03校长的题面【狗头保命】看懂......
  • python字典推导式生成法用法
    prices={"aaa":166,"bbb":56,"cdfsa":133,"fs":22,"Sy":233.34}#生成式(推导式)的用法#用股票价格大于100元的股票构造一个新的字典prices......
  • 静态链接库与动态链接库
    ​​静态链接库​​​​动态链接库​​​​浅谈Windows平台下C++调用静态链接库的方式​​​​lib文件​​​​Windows动态链接库DLL使用​​​​WindowsAPI编程之动态链......
  • 动态规划 - 股票
    动态规划的本质是从子状态推出当前状态,且无后效性;需要我们合理地定义状态。对于股票的最大利润,决定性的状态因素有三个:第i天结束时,最多能进行k次交易,当前是否持有股......