问一个简单的问题?
我写了一个驱动程序, 源程序由 file1.c, file2.c ,file3.c ... (file1.h,file2.h,file3.h..)等组成, 编译后要到开发板上运行。
Makefile 如下:
CC = gcc
LD = ld
INCLUDEDIR = /usr/src/linux-2.4.20-8/include
SRC0 = /home/test/src
INC0 = /home/test/inc
#-DEXPORT_SYMTAB -D__KERNEL_SYSCALLS__ -DCONFIG_MODULES
CFLAGS = -static -g -DMODULE -D__KERNEL__ -O2 -Wall -I$(INCLUDEDIR)
INC = $(INC0)/file1.h $(INC0)/file2.h $(INC0)/file3.h
SRC = $(SRC0)/file1.c $(SRC0)/file2.c $(SRC0)/file3.c
OBJ = $(SRC:.c=.o)
all: test.o
test.o: $(OBJ)
$(LD) -r $^ -o $@
clean:
rm -f $(SRC0)/*.o core *.bak *.o
现在编译后的 test.o 有 1M 多,因为这个.o 文件是要到开发板上运行的,文件有点大, 我的意思是,编译后需要 LD 进行链接 吗?
有没有办法减少test.o 文件的大小(前提条件是不改变程序的功能)。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
你要看你为什么需要链接了,不链接能运行么?如果可以,那链接也没有必要了。
lz看一下kernerl目录下的.config, 里面是不是debug_info打开了, 会导致.o文件过大.
不链接不行,提示找不到 file2.o 或 file3.o 里面的涵数, 因为我的主程序里面可能要用到这些涵数, 还有我去掉 -g 参数行不行
[ 本帖最后由 nflx 于 2009-5-5 10:23 编辑 ]
strip 一下会变小。
什么意思啊? 不是很明白. 能不能去掉 Makefile 里面的 -g 参数
[ 本帖最后由 nflx 于 2009-5-5 10:26 编辑 ]
可以去掉
去掉-g 会变小的,-g是调试用的
你的编译器怎么用虚拟机的gcc呢?难道你的板子上的cpu是x86兼容的?
估计是x86的开发机