当前位置: 技术问答>linux和unix
关于生成动态链接库的问题
来源: 互联网 发布时间:2015-12-14
本文导语: 最近遇到一个实际的问题,一直不能解决,希望哪位大虾能够帮小弟看看啊: 现在我有一些.c文件,名字为one.c ,two.c,three.c four.c,还有一些头文件放在./include目录下面,分别是one.h,tow.h,three.h,four.h和other.h,所需要的...
最近遇到一个实际的问题,一直不能解决,希望哪位大虾能够帮小弟看看啊:
现在我有一些.c文件,名字为one.c ,two.c,three.c four.c,还有一些头文件放在./include目录下面,分别是one.h,tow.h,three.h,four.h和other.h,所需要的标准链接库有libfirst.a,libtwo.a,还有一些库是放在./lib目录下面,有libthree.a现在我要把这几个文件生成能够具有调试信息的.so,即动态链接库,该怎么写这个makefile啊?
现在我有一些.c文件,名字为one.c ,two.c,three.c four.c,还有一些头文件放在./include目录下面,分别是one.h,tow.h,three.h,four.h和other.h,所需要的标准链接库有libfirst.a,libtwo.a,还有一些库是放在./lib目录下面,有libthree.a现在我要把这几个文件生成能够具有调试信息的.so,即动态链接库,该怎么写这个makefile啊?
|
SONAME=libtest.so
OBJ=one.o two.o three.o four.o
INCLUDE=-I./include
CC=gcc -fPIC -g
all:$(SONAME)
one.o: one.c ./include/one.h
two.o: two.c ./include/two.h
three.o: three.c ./include/three.h
four.o: four.c ./include/four.h
$(SONAME): $(OBJ)
ld -shared -o $(SONAME) $(OBJ) libfirst.a libtwo.a ../liblibthree.a
OBJ=one.o two.o three.o four.o
INCLUDE=-I./include
CC=gcc -fPIC -g
all:$(SONAME)
one.o: one.c ./include/one.h
two.o: two.c ./include/two.h
three.o: three.c ./include/three.h
four.o: four.c ./include/four.h
$(SONAME): $(OBJ)
ld -shared -o $(SONAME) $(OBJ) libfirst.a libtwo.a ../liblibthree.a
|
大概就是这个样子吧,你也可以写的复杂点,定义一些变量,把gcc后面的内容放进去
TARGET:xx.so
LIB:-lfirst -ltwo -L./lib -lthree
SOURCE:one.c two.c three.c four.c
INCLUDE:-I./include
CFLAG:-g -shared
CC:gcc
$(TARGET):$(SOURCE)
$(CC) $(CFLAG) -o $@ $? $(INCLUDE) $(LIB)
如果为了省事:
target.so:one.c two.c three.c four.c
gcc -g -shared -o target.so one.c two.c three.c four.c -I./include -lfirst -ltwo -L./lib -lthree
TARGET:xx.so
LIB:-lfirst -ltwo -L./lib -lthree
SOURCE:one.c two.c three.c four.c
INCLUDE:-I./include
CFLAG:-g -shared
CC:gcc
$(TARGET):$(SOURCE)
$(CC) $(CFLAG) -o $@ $? $(INCLUDE) $(LIB)
如果为了省事:
target.so:one.c two.c three.c four.c
gcc -g -shared -o target.so one.c two.c three.c four.c -I./include -lfirst -ltwo -L./lib -lthree