EnjoyTech 发表于 2006-10-12 11:06:28

如何解决 引用头文件发现内容不全的问题?

编程时遇到 调用 /usr/include/linux下的头文件,结果发现里面的头文件内容和 src 源代码中的头文件内容不一致,同名文件的内容源代码中更全,/usr/include/linux下文件很多内容都没有定义,导致编程中 出现 有的变量没有定义声明 的问题,请问如何解决?
试着将src中的include/linux拷贝出来放到usr目录下(比较笨的办法),结果发现这里面有的结构体仍然提示没有定义(如 struct semaphore),总不能把源代码中的 整个include文件夹都考出来覆盖吧?即使那样可以那程序放到别的机器上不是仍然不能执行?不知如何解决,还请这里的大侠指点一下!谢谢!

mozilla 发表于 2006-10-12 11:48:10

能编译过去就没问题。
/usr/include/linux一般在编译glibc才用到,你要用到它的那些定义?
/usr/src/linux/include/linux里的头文件在开发模块时才用到。

EnjoyTech 发表于 2006-10-12 14:10:49

多谢版主!
我是想进行 netfilter编程,下面是我程序的开始引用头文件部分

#define __KERNEL__
#define MODULE

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/netfilter.h>
#include <linux/netfilter_ipv4.h>


文件名为 filTest.c
使用gcc -o ftest.o filTest.c   编译。

目的是想生成模块,然后注册进linux
但是显示变量没有定义的错误。
我的环境是redhat 9,2.4.2内核

mozilla 发表于 2006-10-13 08:33:45

rh9应该是2.4.20-8吧。
gcc -o ftest.o filTest.c -I/usr/src/linux/include

EnjoyTech 发表于 2006-10-13 11:23:58

版主太厉害了!
现在 还有一个错误。说找不到
/linux/version.h这个文件。
用到里面的一个变量 UTS_RELEASE
,我查了一下,在其它路径里面有这个文件,但是仍然没有 定义这个变量。
该怎么解决?很奇怪,明明是内核代码,自己怎么会出现无定义无变量的问题呢?

mozilla 发表于 2006-10-16 09:19:33

version.h应该在/usr/src/linux/include/linux目录下,如果没有,你这个linux源码应该有问题吧。

EnjoyTech 发表于 2006-10-18 09:51:46

我是完全安装的。而且我在在线代码阅读网站http://lxr.linux.no/source/ 上查到的文件情况和我机器的情况一样,也是没有的。不但是2.4.20的没有这个目录下文件,相邻几个版本也没有这个文件,真奇怪。

EnjoyTech 发表于 2006-10-18 11:13:43

很奇怪,刚才在根目录搜索了一下。发现这么一个怪现象:
装完系统不久 我为了看代码方便,曾经把内核代码拷贝到windows下;现在发现拷贝到windows下的这个源码里面是有version.h这个目录文件的,但是回到linux下面还是没有。没有理由我删除过这个文件啊。现在把version.h拷贝回来。开始的错误已经没有了,又出现其它结构没有定义的问题。可能是类似的原因吧,我先试试。

EnjoyTech 发表于 2006-10-18 13:53:11

现在解决了。
因为做的是内核模块,所以编绎的时候加上 -c 参数就OK 了,即
gcc -o ftest.o filTest.c-c-I/usr/src/linux/include

多谢mozilla的热情帮助! :-D
页: [1]
查看完整版本: 如何解决 引用头文件发现内容不全的问题?