当前位置: 技术问答>linux和unix
用GCC将源文件编译成库文件的问题
来源: 互联网 发布时间:2015-10-19
本文导语: 由于工作分工的问题,我做一个项目的一部分,大概情况是这样: 我用a.h,a.c,b.h,b.c,c.h,c.c来完成一个功能模块,由别人调用a.h中的一个函数来启动我的这个模块,在b.c中还要调用另一个人写的功能模块,我想将a,b,c 编译成一...
由于工作分工的问题,我做一个项目的一部分,大概情况是这样:
我用a.h,a.c,b.h,b.c,c.h,c.c来完成一个功能模块,由别人调用a.h中的一个函数来启动我的这个模块,在b.c中还要调用另一个人写的功能模块,我想将a,b,c 编译成一个库文件,这样,在最后一起合成时提供一个my.o文件就可以了,别人调用我的函数,我也可以调用它人写的函数,用GCC怎样编译才好?
现在我可以用 gcc -c a.c这样的命令编译出a.o,b.o,c.o,但不知道怎样将这三个.o文件合成一个.o文件.
(在这三个文件中没有 main函数,这点要注意)
请给出详细的编译步骤,谢谢 !
我用a.h,a.c,b.h,b.c,c.h,c.c来完成一个功能模块,由别人调用a.h中的一个函数来启动我的这个模块,在b.c中还要调用另一个人写的功能模块,我想将a,b,c 编译成一个库文件,这样,在最后一起合成时提供一个my.o文件就可以了,别人调用我的函数,我也可以调用它人写的函数,用GCC怎样编译才好?
现在我可以用 gcc -c a.c这样的命令编译出a.o,b.o,c.o,但不知道怎样将这三个.o文件合成一个.o文件.
(在这三个文件中没有 main函数,这点要注意)
请给出详细的编译步骤,谢谢 !
|
将三个.o文件可以合并成一个.a文件,用ar来打包。之后就可以给你的同事调用了。( ar ru ..... )
最好写makefile
-------------------------------------
下面为一个很简单的makefile文件
OBJS = test.a
CC = gcc
CFLAGS = -Wall -g
all: $(OBJS)
$(OBJS) : m.o c.o b.o
ar ru $@ $?
.c.o:
$(CC) -c -o $*.o $*.c
clean:
rm -rf $(OBJS)
rm -rf *.o
最好写makefile
-------------------------------------
下面为一个很简单的makefile文件
OBJS = test.a
CC = gcc
CFLAGS = -Wall -g
all: $(OBJS)
$(OBJS) : m.o c.o b.o
ar ru $@ $?
.c.o:
$(CC) -c -o $*.o $*.c
clean:
rm -rf $(OBJS)
rm -rf *.o
|
给个例子:
OBJS=serv_pub.o proc_pub.o Thread.o Semaphore.o Demon.o TradeIni.o
libDataProcess.so:$(OBJS)
g++ $(CFLAGS) -D T_DEBUG -D __LINUX__ -shared -I ../Common -O2 -o libDataProcess.so $(OBJS) -lpthread -L../comm_bas -lGeneralFunction -L../datafile -lFileProcess -L../comm_utl -lDevice -L../GlbVarible -lGlbVarible
serv_pub.o:serv_pub.cpp
g++ $(CFLAGS) -D T_DEBUG -D __LINUX__ -fPIC -O2 -c serv_pub.cpp
proc_pub.o:proc_pub.cpp
g++ $(CFLAGS) -D T_DEBUG -D __LINUX__ -fPIC -c proc_pub.cpp
TradeIni.o:TradeIni.cpp
g++ $(CFLAGS) -D T_DEBUG -D __LINUX__ -fPIC -c TradeIni.cpp
Semaphore.o:../Common/Semaphore.cpp
g++ $(CFLAGS) -D __LINUX__ -fPIC -c ../Common/Semaphore.cpp
Thread.o:../Common/Thread.cpp
g++ $(CFLAGS) -D __LINUX__ -fPIC -c ../Common/Thread.cpp
Demon.o:../Common/Demon.cpp
g++ $(CFLAGS) -D __LINUX__ -fPIC -c ../Common/Demon.cpp
clean:
rm -f *.o *.so
OBJS=serv_pub.o proc_pub.o Thread.o Semaphore.o Demon.o TradeIni.o
libDataProcess.so:$(OBJS)
g++ $(CFLAGS) -D T_DEBUG -D __LINUX__ -shared -I ../Common -O2 -o libDataProcess.so $(OBJS) -lpthread -L../comm_bas -lGeneralFunction -L../datafile -lFileProcess -L../comm_utl -lDevice -L../GlbVarible -lGlbVarible
serv_pub.o:serv_pub.cpp
g++ $(CFLAGS) -D T_DEBUG -D __LINUX__ -fPIC -O2 -c serv_pub.cpp
proc_pub.o:proc_pub.cpp
g++ $(CFLAGS) -D T_DEBUG -D __LINUX__ -fPIC -c proc_pub.cpp
TradeIni.o:TradeIni.cpp
g++ $(CFLAGS) -D T_DEBUG -D __LINUX__ -fPIC -c TradeIni.cpp
Semaphore.o:../Common/Semaphore.cpp
g++ $(CFLAGS) -D __LINUX__ -fPIC -c ../Common/Semaphore.cpp
Thread.o:../Common/Thread.cpp
g++ $(CFLAGS) -D __LINUX__ -fPIC -c ../Common/Thread.cpp
Demon.o:../Common/Demon.cpp
g++ $(CFLAGS) -D __LINUX__ -fPIC -c ../Common/Demon.cpp
clean:
rm -f *.o *.so
|
用ar把3个.o文件合在一起就行了。也可以用gcc编译成动态库
|
Makefile文件 具体格式参看楼上
|
二楼的CFLAGS = -Wall -g好象没用到