QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2246|回复: 8

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

[复制链接]
发表于 2006-10-12 11:06:28 | 显示全部楼层 |阅读模式
编程时遇到 调用 /usr/include/linux下的头文件,结果发现里面的头文件内容和 src 源代码中的头文件内容不一致,同名文件的内容源代码中更全,/usr/include/linux下文件很多内容都没有定义,导致编程中 出现 有的变量没有定义声明 的问题,请问如何解决?
试着将src中的include/linux拷贝出来放到usr目录下(比较笨的办法),结果发现这里面有的结构体仍然提示没有定义(如 struct semaphore),总不能把源代码中的 整个include文件夹都考出来覆盖吧?即使那样可以那程序放到别的机器上不是仍然不能执行?不知如何解决,还请这里的大侠指点一下!谢谢!
发表于 2006-10-12 11:48:10 | 显示全部楼层
能编译过去就没问题。
/usr/include/linux一般在编译glibc才用到,你要用到它的那些定义?
/usr/src/linux/include/linux里的头文件在开发模块时才用到。
回复

使用道具 举报

 楼主| 发表于 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内核
回复

使用道具 举报

发表于 2006-10-13 08:33:45 | 显示全部楼层
rh9应该是2.4.20-8吧。
gcc -o ftest.o filTest.c -I/usr/src/linux/include
回复

使用道具 举报

 楼主| 发表于 2006-10-13 11:23:58 | 显示全部楼层
版主太厉害了!
现在 还有一个错误。说找不到
/linux/version.h  这个文件。
用到里面的一个变量 UTS_RELEASE
,我查了一下,在其它路径里面有这个文件,但是仍然没有 定义这个变量。
该怎么解决?很奇怪,明明是内核代码,自己怎么会出现无定义无变量的问题呢?
回复

使用道具 举报

发表于 2006-10-16 09:19:33 | 显示全部楼层
version.h应该在/usr/src/linux/include/linux目录下,如果没有,你这个linux源码应该有问题吧。
回复

使用道具 举报

 楼主| 发表于 2006-10-18 09:51:46 | 显示全部楼层
我是完全安装的。而且我在在线代码阅读网站http://lxr.linux.no/source/ 上查到的文件情况和我机器的情况一样,也是没有的。不但是2.4.20的没有这个目录下文件,相邻几个版本也没有这个文件,真奇怪。
回复

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2006-10-18 13:53:11 | 显示全部楼层
现在解决了。
因为做的是内核模块,所以编绎的时候加上 -c 参数就OK 了,即
gcc -o ftest.o filTest.c  -c  -I/usr/src/linux/include

多谢mozilla的热情帮助!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-2 06:35 , Processed in 0.041851 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表