免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2058 | 回复: 0
打印 上一主题 下一主题

linux 头文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-11 14:08 |只看该作者 |倒序浏览


关于/usr/src/linux/include/linux中的头文件的疑问


  
在我的red hat 9.0(linux-2.4.20-8)系统中,目录/usr/src/linux/include/linux和目录usr/include/linux中都有许多头文件,并且头文件名都相同,但是对于文件里面的内容,有的头文件相同,有的却不一样。
我想请问一下,这两个目录下的头文件有什么关联吗?它们分别有什么用法的不同!
文章选项:


Atu
(veteran)
05-05-23 14:54

Re: 关于/usr/src/linux/include/linux中的头文件的疑问

[
re: goodness4960
]
  
/usr/src/linux/include/linux是给编译内核用的
/usr/include/linux是给编译应用程序用的
如果你的/usr/src/linux/里的内核源码,与当前运行的内核一致
可以
ln -s /usr/src/linux/include/linux /usr/include/linux
ln -s /usr/src/linux/include/asm /usr/include/asm
以前的Linux一般也都是这样的。
但是在最新的发布中,似乎更推荐两者分开。
文章选项:


goodness4960
(stranger)
05-05-24 09:36

Re: 关于/usr/src/linux/include/linux中的头文件的疑问

[
re: Atu
]
  
如果说/usr/src/linux/include/linux是给编译内核用的; 而/usr/include/linux是给编译应用程序用的 ,那是不是也可以说,我在基于内核进行编程(模块编程)时,在编译程序时,是不是用/usr/src/linux/include/linux的头文件,如:gcc -O -c -I/usr/src/linux/include examplemod.c ;但是基于用户空间编程(比如libipq)时,在编译程序是不是用/usr/include/linux的头文件,如:gcc -O -c -I/usr/include examplespace.c ;
文章选项:


Atu
(veteran)
05-05-24 09:49

Re: 关于/usr/src/linux/include/linux中的头文件的疑问

[
re: goodness4960
]
  
究竟该用哪个,是看你要编译的东西,是否依赖内核版本。
如果不依赖,用哪个都无所谓。
否则,就要看你编译的东西,希望它运行于何种内核:是当前运行的内核,还是源码目录(一般是/usr/src/linux)中的内核
然后,根据情况选择该使用何种头文件。
即使你是在编译Kernel 模块,如果希望它运行于当前运行的Kernel,那还是应该使用/usr/include/linux;
否则,如果你希望你编译的Kernel 模块与源码目录中编译出来的Kernel一起发布,就应该使用 /usr/src/linux/include/linux。
----以上是我的理解,仅供参考,如果有说的不准确的地方,欢迎讨论。
文章选项:


goodness4960
(stranger)
05-05-24 10:09

Re: 关于/usr/src/linux/include/linux中的头文件的疑问

[
re: Atu
]
  
如果说/usr/src/linux/include/linux是给编译内核用的; 而/usr/include/linux是给编译应用程序用的 ,那是不是也可以说,我在基于内核进行编程(模块编程)时,在编译程序时,是不是用/usr/src/linux/include/linux的头文件,如:gcc -O -c -I/usr/src/linux/include examplemod.c ;但是基于用户空间编程(比如libipq)时,在编译程序是不是用/usr/include/linux的头文件,如:gcc -O -c -I/usr/include examplespace.c ;
我在redhat9.0(linux-2.4.20-8)环境下编译了一个和netfilter相关的内核程序程序,当我用gcc -O -c -I/usr/src/linux/include examplemod.c编译时,就没有问题,但我用gcc -O -c -I/usr/include examplemod.c编译时就不能通过,出现如下的错物欲告警:
/usr/include/linux/netfilter_ipv4.h:53: `INT_MIN' undeclared here (not in a function)
/usr/include/linux/netfilter_ipv4.h:53: enumerator value for `NF_IP_PRI_FIRST' not integer constant
/usr/include/linux/netfilter_ipv4.h:59: `INT_MAX' undeclared here (not in a function)
/usr/include/linux/netfilter_ipv4.h:59: enumerator value for `NF_IP_PRI_LAST' not integer constant
test1.c:21: warning: `struct net_device' declared inside parameter list
test1.c:21: warning: its scope is only this definition or declaration, which is probably not what you want
test1.c:21: warning: `struct sk_buff' declared inside parameter list
test1.c: In function `init_module':
test1.c:37: invalid use of undefined type `struct nf_hook_ops'
test1.c:38: invalid use of undefined type `struct nf_hook_ops'
test1.c:39: invalid use of undefined type `struct nf_hook_ops'
test1.c:40: invalid use of undefined type `struct nf_hook_ops'
/usr/include/linux/byteorder/swab.h: At top level:
test1.c:14: storage size of `nfho' isn't known
文章选项:


goodness4960
(stranger)
05-05-24 10:09

Re: 关于/usr/src/linux/include/linux中的头文件的疑问 [
re: Atu
]
  
我在redhat9.0(linux-2.4.20-8)环境下编译了一个和netfilter相关的内核程序,当我用gcc -O -c -I/usr/src/linux/include examplemod.c编译时,就没有问题,但我用gcc -O -c -I/usr/include examplemod.c编译时就不能通过,出现如下的错误告警:
/usr/include/linux/netfilter_ipv4.h:53: `INT_MIN' undeclared here (not in a function)
/usr/include/linux/netfilter_ipv4.h:53: enumerator value for `NF_IP_PRI_FIRST' not integer constant
/usr/include/linux/netfilter_ipv4.h:59: `INT_MAX' undeclared here (not in a function)
/usr/include/linux/netfilter_ipv4.h:59: enumerator value for `NF_IP_PRI_LAST' not integer constant
test1.c:21: warning: `struct net_device' declared inside parameter list
test1.c:21: warning: its scope is only this definition or declaration, which is probably not what you want
test1.c:21: warning: `struct sk_buff' declared inside parameter list
test1.c: In function `init_module':
test1.c:37: invalid use of undefined type `struct nf_hook_ops'
test1.c:38: invalid use of undefined type `struct nf_hook_ops'
test1.c:39: invalid use of undefined type `struct nf_hook_ops'
test1.c:40: invalid use of undefined type `struct nf_hook_ops'
/usr/include/linux/byteorder/swab.h: At top level:
test1.c:14: storage size of `nfho' isn't known
文章选项:


Atu
(veteran)
05-05-24 10:37

Re: 关于/usr/src/linux/include/linux中的头文件的疑问

[
re: goodness4960
]
  
是否是你的/usr/include/linux目录下面的头文件有错误?
这些文件都是在glibc-kernelheaders-x.x.x.rpm里面安装的
你可以检查它是否完整。
rpm -V glibc-kernelheaders
我使用的是2.6.9的Kernel
INT_MIN和INT_MAX定义在/usr/include/linux/kernel.h
#define INT_MAX     ((int)(~0U>>1))
#define INT_MIN     (-INT_MAX - 1)
#define UINT_MAX    (~0U)
#define LONG_MAX    ((long)(~0UL>>1))
#define LONG_MIN    (-LONG_MAX - 1)
#define ULONG_MAX   (~0UL)
类型struct nf_hook_ops声明在/usr/include/linux/netfilter.h
struct nf_hook_ops
{
    struct list_head list;
    /* User fills in from here down. */
    nf_hookfn *hook;
    struct module *owner;
    int pf;
    int hooknum;
    /* Hooks are ordered in ascending priority. */
    int priority;
};
文章选项:


nxin
(addict)
05-05-24 13:55

Re: 关于/usr/src/linux/include/linux中的头文件的疑问

[
re: goodness4960
]
  
redhat的/usr/include属于glibc,不是给内核用的,虽然也包含asm和linux目录,但是简化过的,编译内核模块偶尔能成功,幸运而已,我建议编译内核时加-nostdinc参数,以防止使用了错误的目录。
文章选项:




本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/96265/showart_1924316.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP