关于linux编译多个源文件的问题

查了很久没查到,欢迎牛人啊

我有源文件1.c和2.c 现在想将两个文件编译成一个a.o模块,是一个模块不是一个应用程序。
我的想法是分别编译的先编译出1.o和2.o两个模块,然后将两个模块编译成一个,可惜悲剧了,希望牛人能指点高招

最好能编译成内核模块,因为我现在正在学习做驱动,如果是普通模块也行,我参考一下。网上关于这方面的资料真是少啊~~

我把一半的分数都贡献出来了,家底不是很丰厚哈^_^

作者: kzl0629   发布时间: 2011-04-21

消灭0回复,沙发自己占- -!看咱这结帖率也得回个贴啊

作者: kzl0629   发布时间: 2011-04-21

一个.c对应一个.o
如果要合并打包,用ar打包成.a文件,相当于静态库,连接的时候和.o一样用。

ar rc pack.a 1.o 2.o

作者: SonicLing   发布时间: 2011-04-21

LIB := $(obj)libmarvellpost.a

COBJS-y += 1.o
COBJS-y += 2.o

COBJS := $(COBJS-y)
CRCS := $(COBJS:.o=.c)
OBJS := $(addprefix $(obj),$(COBJS))

all: $(LIB)

$(LIB): $(obj).depend $(OBJS)
$(AR) $(ARFLAGS) $@ $(OBJS)

作者: ges102   发布时间: 2011-04-22

引用 2 楼 sonicling 的回复:
一个.c对应一个.o
如果要合并打包,用ar打包成.a文件,相当于静态库,连接的时候和.o一样用。

ar rc pack.a 1.o 2.o

生产pack.a这个文件可以插入内核,当内核驱动模块使用吗?

作者: kzl0629   发布时间: 2011-04-22

引用 3 楼 ges102 的回复:
LIB := $(obj)libmarvellpost.a

COBJS-y += 1.o
COBJS-y += 2.o

COBJS := $(COBJS-y)
CRCS := $(COBJS:.o=.c)
OBJS := $(addprefix $(obj),$(COBJS))

all: $(LIB)

$(LIB): $(obj).depend $(OBJS)
$(……

这个代码貌似只是某大段中的一部分啊,不要把我当高手,复制粘贴也要粘全套的啊

作者: kzl0629   发布时间: 2011-04-22

引用 4 楼 kzl0629 的回复:

引用 2 楼 sonicling 的回复:
一个.c对应一个.o
如果要合并打包,用ar打包成.a文件,相当于静态库,连接的时候和.o一样用。

ar rc pack.a 1.o 2.o

生产pack.a这个文件可以插入内核,当内核驱动模块使用吗?

当然不行。插入内核的只能是内核模块(ko文件),要编译成ko才能insmod。

作者: SonicLing   发布时间: 2011-04-23

引用 6 楼 sonicling 的回复:
引用 4 楼 kzl0629 的回复:

引用 2 楼 sonicling 的回复:
一个.c对应一个.o
如果要合并打包,用ar打包成.a文件,相当于静态库,连接的时候和.o一样用。

ar rc pack.a 1.o 2.o

生产pack.a这个文件可以插入内核,当内核驱动模块使用吗?

当然不行。插入内核的只能是内核模块(ko文件),要编译成ko才能insmod。

...我用的是2.4的= =! 用2.6的也就是2个.ko可以合成一个.ko吗?如果不能,两个源文件怎么编译成一个模块?

作者: kzl0629   发布时间: 2011-04-23