用GCC将源文件编译成库文件的问题

wjw200082 2005-09-16 12:31:38
由于工作分工的问题,我做一个项目的一部分,大概情况是这样:
我用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函数,这点要注意)
请给出详细的编译步骤,谢谢 !
...全文
489 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjw200082 2005-09-17
  • 打赏
  • 举报
回复
谢谢各位了!
hundlom 2005-09-16
  • 打赏
  • 举报
回复
将三个.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
yjf7888 2005-09-16
  • 打赏
  • 举报
回复
用ar把3个.o文件合在一起就行了。也可以用gcc编译成动态库
wxywh 2005-09-16
  • 打赏
  • 举报
回复
如果是C文件,将g++改为gcc就OK 了。
wxywh 2005-09-16
  • 打赏
  • 举报
回复
给个例子:
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
bugebear3 2005-09-16
  • 打赏
  • 举报
回复
二楼的CFLAGS = -Wall -g好象没用到
诗魂鹤影 2005-09-16
  • 打赏
  • 举报
回复
Makefile文件 具体格式参看楼上

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧