日期:2014-05-16  浏览次数:20710 次

求助 ubuntu系统下C开发调用内核函数总报ndefined reference错误
现在在带有CDT的eclipse中开发一个C程序,目的是调用内核函数读取指定进程的task_struct信息。

#include <stdio.h>
#include <stdlib.h>
#include<linux/sched.h>//查到该头文件中包含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,这个是任务队列,根本不
是可以当做接口的内核函数啊?只是内核自己进行任务
调度之类的时候使用而已,而不是给用户空间的程序使用的

本人菜鸟,也刚学驱动,如果有误,请大家多多包涵啊