关于linux编译多个源文件的问题
查了很久没查到,欢迎牛人啊
我有源文件1.c和2.c 现在想将两个文件编译成一个a.o模块,是一个模块不是一个应用程序。
我的想法是分别编译的先编译出1.o和2.o两个模块,然后将两个模块编译成一个,可惜悲剧了,希望牛人能指点高招
最好能编译成内核模块,因为我现在正在学习做驱动,如果是普通模块也行,我参考一下。网上关于这方面的资料真是少啊~~
我把一半的分数都贡献出来了,家底不是很丰厚哈^_^
我有源文件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
如果要合并打包,用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)
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
一个.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)
$(……
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这个文件可以插入内核,当内核驱动模块使用吗?
引用 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。
引用 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