阅读:4046回复:16
No rule to make target \'Rules.make\'
我想编译linux下源码树中linux/net/packet的程序。
结果出现如下错误: Makefile:134: /Rules.make: No such file or directory make[1]: *** No rule to make target `/Rules.make\'. Stop. 不知道怎么动手啊。修改Makefile也不行:( 谁来帮帮我? |
|
|
沙发#
发布于:2003-11-01 21:56
很明显没有Rules.make文件啊
|
|
板凳#
发布于:2003-11-02 14:45
不是那个问题。
呵呵,我把/usr/include下的头文件用linux源码下的头文件覆盖后就可以了,不不知why? |
|
|
地板#
发布于:2003-11-02 14:52
知了!我也遇到过!单独编译linux/net/packet做什么?
|
|
地下室#
发布于:2003-11-03 16:44
想抓包啊
|
|
|
5楼#
发布于:2003-11-03 16:58
直接编译不行的... 需要重新写一个Makefile...
还得看看你所编译的东东有没有关联的文件(我没 编译过... ) 核对一下,你是不是要编译里面的af_packet.c ? 如果是的话,试下下面的: gcc -O2 -D__KERNEL__ -DMODULE -c af_packet.c -I/usr/src/linux-2.4/include **** /usr/src/linux-2.4 是内核代码目录 |
|
|
6楼#
发布于:2003-11-03 17:00
ft ... 发现前言不搭后语...
我是先写了前面的,然后又去linux 下编译了一下 总之我编译通过的,内核是2.4.7-10 |
|
|
7楼#
发布于:2003-11-03 22:45
ft ... 发现前言不搭后语... 我也能通过,可是开始是用 insmod af_pakcet.o可以把他安装上去。 可是我rmmod af_packet后, 发现再也安装不上去了。 [编辑 - 11/3/03 by antspower] |
|
|
8楼#
发布于:2003-11-03 23:21
不是那个问题。 不记得是在哪本书里面看到说老的LINUX里面是直接把kernel 源文件里面的头文件给作个符号链接到系统的包含文件目录里面,但是新的系统里面都不这么做了,因为库程序的开发和kernel有个滞后,所以新的系统都有个和当前库程序相配的kernel header包。redhat的叫 glibc-kernheaders-2.4-8.36 什么的。所以说绝对不要覆盖库程序的头文件,那样可能会使系统不work。 那个Rules.make 就在 /lib/modules/`uname -r`/build 下面,所以如果给那个Makefile里面加上 TOPDIR := /lib/modules/$(shell uname -r)/build 不知道行不行? |
|
9楼#
发布于:2003-11-03 23:35
或者试试这个,好像从2。4开始kernel build都用个什么kbuild system。我是搞了好长时间就是搞不懂。不过这个命令可能能build你要的module:
在net/packet/ 目录里面 make -C /lib/modules/`uname -r`/build SUBDIRS=`pwd` |
|
10楼#
发布于:2003-11-04 00:13
谢谢不管怎么样,先给分了。呵呵
偶现在又在吃瘟草,唉 |
|
|
11楼#
发布于:2003-11-04 03:57
哇,太感谢帮主了 :D
还是第一次拿分,感觉不错 :P |
|
12楼#
发布于:2003-11-04 08:58
可怜的版猪 :D,5555~
|
|
|
13楼#
发布于:2003-11-04 10:25
[quote]ft ... 发现前言不搭后语... 我也能通过,可是开始是用 insmod af_pakcet.o可以把他安装上去。 可是我rmmod af_packet后, 发现再也安装不上去了。 [编辑 - 11/3/03 by antspower] [/quote] rmmod af_packet 后用lsmod 看看这个模块还在不在? 还有... 看看rmmod af_packet 以及再次安装有些什么 信息打出来? 信息有些是直接打出来,有些可以在/var/log/messages 里面可以看到... |
|
|
14楼#
发布于:2003-11-04 10:29
[quote]不是那个问题。 不记得是在哪本书里面看到说老的LINUX里面是直接把kernel 源文件里面的头文件给作个符号链接到系统的包含文件目录里面,但是新的系统里面都不这么做了,因为库程序的开发和kernel有个滞后,所以新的系统都有个和当前库程序相配的kernel header包。redhat的叫 glibc-kernheaders-2.4-8.36 什么的。所以说绝对不要覆盖库程序的头文件,那样可能会使系统不work。 那个Rules.make 就在 /lib/modules/`uname -r`/build 下面,所以如果给那个Makefile里面加上 TOPDIR := /lib/modules/$(shell uname -r)/build 不知道行不行? [/quote] 这个问题简单可以这么说: /usr/include 都是应用程序包含的头文件 /usr/src/linux-***/include/ 下是内核程序包含的头文件 由于应用层和内核层的函数定义与实现是有区别的(有时候 表面看函数是一样的,但实际不一样) 所以,编译不同的程序要指定不同的路径。 应用层是默认的,没关系。内核的就要加个 -I/usr/src/linux-***/include 才行... 最好不要采用覆盖。因为会影响到以 后编译应用层程序。 |
|
|
15楼#
发布于:2003-11-19 10:10
多谢MOBI
|
|
|
16楼#
发布于:2003-11-27 04:54
[quote][quote]不是那个问题。 不记得是在哪本书里面看到说老的LINUX里面是直接把kernel 源文件里面的头文件给作个符号链接到系统的包含文件目录里面,但是新的系统里面都不这么做了,因为库程序的开发和kernel有个滞后,所以新的系统都有个和当前库程序相配的kernel header包。redhat的叫 glibc-kernheaders-2.4-8.36 什么的。所以说绝对不要覆盖库程序的头文件,那样可能会使系统不work。 那个Rules.make 就在 /lib/modules/`uname -r`/build 下面,所以如果给那个Makefile里面加上 TOPDIR := /lib/modules/$(shell uname -r)/build 不知道行不行? [/quote] 这个问题简单可以这么说: /usr/include 都是应用程序包含的头文件 /usr/src/linux-***/include/ 下是内核程序包含的头文件 由于应用层和内核层的函数定义与实现是有区别的(有时候 表面看函数是一样的,但实际不一样) 所以,编译不同的程序要指定不同的路径。 应用层是默认的,没关系。内核的就要加个 -I/usr/src/linux-***/include 才行... 最好不要采用覆盖。因为会影响到以 后编译应用层程序。 [/quote] mobi 的解释看了好几遍了,但是今天才发现实在是模棱两可,很不清楚 :D 其实你去到/usr/include/linux,还有/usr/include/asm下去看看,那些都是kernel的包含文件,并不是你说的/usr/include下的包含文件都是应用程序的包含文件。那么为什么要有两个copy呢?而不是用一个,比如就是最新的正在用的kernel的包含文件呢?我想原因是这样的:glibc的开发是和kernel有紧密的联系的,因为里面很多东西都要用到kernel的特性,但是glibc的开发是和内核的开发有一定的滞后,它是根据某个特定的内核版本开发的,所以要自带和它想配合的内核的包含文件。但是你如果是开发内核模块,却是要用在自己现在用的内核的,当然要包含和自己用的内核配合的头文件。比如,我用的内核是2.6.0-0.test10的,但是我得glibc的kernel header却是2.4的。就是这样。不知道讲的清楚不。 |
|