当前位置: 技术问答>linux和unix
请教!linux下将.h和.c文件编译成动态连接库!!!
来源: 互联网 发布时间:2014-12-11
本文导语: 我对linux一窍不通,现在要把linux下将.h和.c文件编译成动态连接库,好像是要写一个makefile文件的。我这里有一个生成静态库的makefile,但是不太明白,可以帮我解释一下吗?动态的需要改哪些地方呢?谢谢! NCS = -I...
我对linux一窍不通,现在要把linux下将.h和.c文件编译成动态连接库,好像是要写一个makefile文件的。我这里有一个生成静态库的makefile,但是不太明白,可以帮我解释一下吗?动态的需要改哪些地方呢?谢谢!
NCS = -I/home/judson/src/baseLib -I/usr/include -I/usr/local/include
CCO = gcc -c
AR = ar rs
OBJS = logLib.o socketLib.o
all: libbaseLib.a
.c.o:
${CCO} ${INCS} $
Makefile.new
mv -f Makefile.new Makefile
# DO NOT DELETE THIS LINE -- make depend depends on it.
NCS = -I/home/judson/src/baseLib -I/usr/include -I/usr/local/include
CCO = gcc -c
AR = ar rs
OBJS = logLib.o socketLib.o
all: libbaseLib.a
.c.o:
${CCO} ${INCS} $
Makefile.new
mv -f Makefile.new Makefile
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
下面是一个makefile ,用与创建使用动态库的程序和动态库:
CFLAGS=-wALL -L
libcflags=$(CFLAGS) -D_REENTRANT -fPIC #这行定义了预处理符号(_REENTRANT),并且产生与位置无关的代码(-fPIC),由于库是在运行的时候被调入,所以这是必须的
CC=gcc
OBJS=myprogram.o
LIBOBJS=safecalls.o safecalls2.o
AR=ar rc
LIBRARY=libsafec.so.1.0.0
SONAME=libsafec.so.1
all:myprogram
myprogram: $(OBJS) $(LIBRARY)
$(CC) $(CFLAGS) -O $@ myprogram.o -lsafec
$(LIBRARY):$(LIBOBJS)
$(CC) -shared -W1,-soname, $(SONAME) -O $ @ $(LIBOBJS) -lc#-share表示产生共享代码,-W1使得后面的选项被传递给连接器(-soname libsafec.so.1)
ln -sf $ @ libsafec.so
ln -sf $ @ $(SONAME)#上两行创建了两个链接符,并且装载库进入程序
myprogram.o:myprogram.c
$(CC) $(CFLAGS) -c -o $@ $
CFLAGS=-wALL -L
libcflags=$(CFLAGS) -D_REENTRANT -fPIC #这行定义了预处理符号(_REENTRANT),并且产生与位置无关的代码(-fPIC),由于库是在运行的时候被调入,所以这是必须的
CC=gcc
OBJS=myprogram.o
LIBOBJS=safecalls.o safecalls2.o
AR=ar rc
LIBRARY=libsafec.so.1.0.0
SONAME=libsafec.so.1
all:myprogram
myprogram: $(OBJS) $(LIBRARY)
$(CC) $(CFLAGS) -O $@ myprogram.o -lsafec
$(LIBRARY):$(LIBOBJS)
$(CC) -shared -W1,-soname, $(SONAME) -O $ @ $(LIBOBJS) -lc#-share表示产生共享代码,-W1使得后面的选项被传递给连接器(-soname libsafec.so.1)
ln -sf $ @ libsafec.so
ln -sf $ @ $(SONAME)#上两行创建了两个链接符,并且装载库进入程序
myprogram.o:myprogram.c
$(CC) $(CFLAGS) -c -o $@ $