尽管在Linux内核模块中使用EXPORT_SYMBOL,如何防止“错误:’符号’未声明在这里”?
发布时间:2020-12-15 16:26:03 所属栏目:Linux 来源:互联网
导读:当我收到此错误时,我将一些驱动程序嵌入到 Linux内核中(我在板文件中添加设备并注册它): error: kxtf9_get_slave_descr undeclared here (not in a function) 我将上面的函数放在驱动程序文件中 struct ext_slave_descr *kxtf9_get_slave_descr(void){ retur
当我收到此错误时,我将一些驱动程序嵌入到 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“可见”吗? 其余代码编译完美(因此它“看到”文件夹中的代码),包含上面代码的文件也编译完成! 解决方法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) – 否则会出现链接错误. (编辑:4S站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- linux – bash fork错误(资源暂时不可用)不会停止
- linux – 我需要一个TCP选项(ioctl)来立即发送数
- linux – 如何在终端中记住多个选项卡的会话? (
- dma_mmap_coherent和remap_pfn_range有什么区别?
- 解决两台centos虚拟机Telnet服务无法联机的问题
- TwitteR r包:/usr/lib/x86_64-linux-gnu/libcur
- 如何在ARM Cortex M3主板上运行linux?
- linux快速清空文件 比如log日志
- 如何在linux中创建文件监听器?
- linux – /usr/bin/env关于shebang line pecular
热点阅读