ste*_*tef 6 c i2c linux-device-driver linux-kernel
当我收到此错误时,我将一些驱动程序嵌入到Linux内核中(我在板文件中添加设备并注册它):
error: 'kxtf9_get_slave_descr' undeclared here (not in a function)
Run Code Online (Sandbox Code Playgroud)
我将上面的函数放在驱动程序文件中
struct ext_slave_descr *kxtf9_get_slave_descr(void)
{
return &kxtf9_descr;
}
EXPORT_SYMBOL(kxtf9_get_slave_descr);
Run Code Online (Sandbox Code Playgroud)
它不应该由EXPORT_SYMBOL"可见"吗?包含上面代码的C文件没有头文件(我没有写它,我只是在这里找到它并且我正在实现.他们说它已经过测试所以我假设不需要头文件?
其余代码编译完美(因此它"看到"文件夹中的代码),包含上面代码的文件也编译完成!
Ant*_*tti 10
EXPORT_SYMBOL导出动态链接的符号.你所拥有的不是链接错误,而是由于缺少函数声明而导致的编译错误.您必须为C文件编写头文件并包含该头文件,或者将该函数声明为您正在编译的C文件.
选项1:
kxtf9.h:
#ifndef KXTF9_H
#define KXTF9_H
struct ext_slave_descr *kxtf9_get_slave_descr(void);
#endif
Run Code Online (Sandbox Code Playgroud)
your_file.c:
#include "kxtf9.h"
/* your code where you use the function ... */
Run Code Online (Sandbox Code Playgroud)
选项2:
your_file.c:
struct ext_slave_descr *kxtf9_get_slave_descr(void);
/* your code where you use the function ... */
Run Code Online (Sandbox Code Playgroud)
还要注意EXPORT_SYMBOL文件kxtf9.c中有#ifdef __KERNEL__它,所以你必须正确设置你的构建环境(Makefile) - 否则你会得到一个链接错误.
| 归档时间: |
|
| 查看次数: |
15700 次 |
| 最近记录: |