我已经在操作系统课程中完成了作业,我必须编写一些模块。我们使用Red Hat 8.0和自定义的Linux内核2.4.18.14。我有一个用于编译模块的makefile,但是我无法使它工作。模块源代码在snake.c中,makefile是:
KERNELDIR = /usr/src/linux-2.4.18-14custom
include $(KERNELDIR)/.config
CFLAGS = -D__KERNEL__ -DMODULE –I$(KERNELDIR)/include -O -Wall
all: snake.o
文件位于目录/ home / user / OS4中。 当我在该目录中调用make命令时,它会写错误:
cc: cannot specify -o with -c or -S and multiple compilations
你可以帮帮我吗?
如果你能解释模块编译工作的方式,我会很高兴的。
感谢
答案 0 :(得分:1)
cc -D__KERNEL__ -DMODULE ?I/usr/src/linux-2.4.18-14custom/include -Wall -c -o snake.o snake.c
在I
信之前注意问号。问题是,而不是正常的ascii hyphen-minus -
(ASCII代码:45),你不小心得到了 en dash –
(Unicode 0x2013 ) - 注意线条稍长一些。
它来自CFLAGS
变量:
# CFLAGS = -D__KERNEL__ -DMODULE –I$(KERNELDIR)/include -O -Wall
^^^ This is en dash
用常规连字符 - 替换它,你应该没问题。
(并且由于此参数不以-
开头,因此gcc不将其视为选项,而是将其视为额外的源文件,但-c
选项不允许传递多个源文件)< / p>