首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用insmod时未定义的符号

使用insmod时未定义的符号
EN

Stack Overflow用户
提问于 2017-05-30 16:12:50
回答 1查看 567关注 0票数 1

我写了一个linux-kernel模块,但是当我运行这个命令insmod ./...ko时,内核发布了一个错误:未定义的符号...

在那之后,我寻找了很长一段时间,所有的解决方案都是使用EXPORT_SYMBOL(),所以我把它写在内核代码中并重新构建内核。有趣的事情发生了,内核说是exports duplicate symbol ... (owned by kernel)。符号似乎被导出了多次,但如果是这样,为什么我以前不能使用它?

这是我的模块中的相关代码:

代码语言:javascript
复制
extern struct task_struct *find_task_by_vpid(pid_t nr);
target_tsk = pid == -1 ? current : find_task_by_vpid(pid);

我将内核文件linux/sched.h更改为以下格式:

代码语言:javascript
复制
extern struct task_struct *find_task_by_vpid(pid_t nr);
EXPORT_SYMBOL_GPL(find_task_by_vpid);
EN

回答 1

Stack Overflow用户

发布于 2017-05-30 17:35:13

符号导出(EXPORT_SYMBOL)应在文件(.c)中执行,而不是在头文件(.h)中执行。

这是因为导出符号是(一些其他的)符号的定义,而头文件不适合这样的事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44256928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档