加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

尽管在Linux内核模块中使用EXPORT_SYMBOL,如何防止“错误:’符

发布时间:2020-12-13 19:54:14 所属栏目:Linux 来源:网络整理
导读:当我收到此错误时,我将一些驱动程序嵌入到 Linux内核中(我在板文件中添加设备并注册它): error: 'kxtf9_get_slave_descr' undeclared here (not in a function) 我将上面的函数放在驱动程序文件中 struct ext_slave_descr *kxtf9_get_slave_descr(void){ re
当我收到此错误时,我将一些驱动程序嵌入到 Linux内核中(我在板文件中添加设备并注册它):
error: 'kxtf9_get_slave_descr' undeclared here (not in a function)

我将上面的函数放在驱动程序文件中

struct ext_slave_descr *kxtf9_get_slave_descr(void)
{
    return &kxtf9_descr;
}
EXPORT_SYMBOL(kxtf9_get_slave_descr);

它不应该由EXPORT_SYMBOL“可见”吗?
包含上面代码的C文件没有头文件(我没有写它,我刚刚发现它here并且我正在实现.他们说它已经过测试所以我假设不需要头文件?

其余代码编译完美(因此它“看到”文件夹中的代码),包含上面代码的文件也编译完成!

解决方法

EXPORT_SYMBOL导出动态链接的符号.你所拥有的不是链接错误,而是由于缺少函数声明而导致的编译错误.您必须为C文件编写头文件并包含该头文件,或者将该函数声明为您正在编译的C文件.

选项1:

kxtf9.h:

#ifndef KXTF9_H
#define KXTF9_H

struct ext_slave_descr *kxtf9_get_slave_descr(void);

#endif

your_file.c:

#include "kxtf9.h"
/* your code where you use the function ... */

选项2:

your_file.c:

struct ext_slave_descr *kxtf9_get_slave_descr(void);
/* your code where you use the function ... */

另请注意,文件kxtf9.c中的EXPORT_SYMBOL周围有#ifdef __KERNEL__,因此您必须正确设置构建环境(Makefile) – 否则会出现链接错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读