当前位置: 技术问答>linux和unix
求助 ubuntu系统下C开发调用内核函数总报ndefined reference错误
来源: 互联网 发布时间:2016-12-18
本文导语: 现在在带有CDT的eclipse中开发一个C程序,目的是调用内核函数读取指定进程的task_struct信息。 #include #include #include//查到该头文件中包含find_task_by_vpid函数可以实现该功能 int main(void) { pid_t nr=1604; struct task_struct...
现在在带有CDT的eclipse中开发一个C程序,目的是调用内核函数读取指定进程的task_struct信息。
#include
#include
#include//查到该头文件中包含find_task_by_vpid函数可以实现该功能
int main(void) {
pid_t nr=1604;
struct task_struct *ts=find_task_by_vpid(nr);//error:undefined reference to find_task_by_vpid
return EXIT_SUCCESS;
}
后来以为是该函数是static类型,无法调用,尝试该头文件的其他函数均出现这样的错误
在搜索目录中也添加了linux/sched.h的路径
这是什么原因呢?
是不是还少了什么步骤?
#include
#include
#include//查到该头文件中包含find_task_by_vpid函数可以实现该功能
int main(void) {
pid_t nr=1604;
struct task_struct *ts=find_task_by_vpid(nr);//error:undefined reference to find_task_by_vpid
return EXIT_SUCCESS;
}
后来以为是该函数是static类型,无法调用,尝试该头文件的其他函数均出现这样的错误
在搜索目录中也添加了linux/sched.h的路径
这是什么原因呢?
是不是还少了什么步骤?
|
内核函数只能被内核或驱动程序调用吧
普通的应用程序无法调用
普通的应用程序无法调用
|
写个驱动在调用也不行吧?
你的系统调用会切换到内核空间,然后执行内核的函数
但不代表你驱动实现了什么函数,就有相应的调用接口
比如典型的字符驱动,你只能通过read,write,ioctl等
几个操作文件的基本系统调用才能使用驱动的接口实现,
但是你要用的是task_struct,这个是任务队列,根本不
是可以当做接口的内核函数啊?只是内核自己进行任务
调度之类的时候使用而已,而不是给用户空间的程序使用的
本人菜鸟,也刚学驱动,如果有误,请大家多多包涵啊
你的系统调用会切换到内核空间,然后执行内核的函数
但不代表你驱动实现了什么函数,就有相应的调用接口
比如典型的字符驱动,你只能通过read,write,ioctl等
几个操作文件的基本系统调用才能使用驱动的接口实现,
但是你要用的是task_struct,这个是任务队列,根本不
是可以当做接口的内核函数啊?只是内核自己进行任务
调度之类的时候使用而已,而不是给用户空间的程序使用的
本人菜鸟,也刚学驱动,如果有误,请大家多多包涵啊