Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何预防;错误:';符号';“此处未声明”;尽管Linux内核模块中有导出_符号?_C_Linux Kernel_Linux Device Driver_I2c - Fatal编程技术网

C 如何预防;错误:';符号';“此处未声明”;尽管Linux内核模块中有导出_符号?

C 如何预防;错误:';符号';“此处未声明”;尽管Linux内核模块中有导出_符号?,c,linux-kernel,linux-device-driver,i2c,C,Linux Kernel,Linux Device Driver,I2c,当我遇到这个错误时,我正在将一些驱动程序嵌入Linux内核(我正在将设备添加到board文件中并注册它): 我在驱动程序文件中找到了上面的函数 struct ext_slave_descr *kxtf9_get_slave_descr(void) { return &kxtf9_descr; } EXPORT_SYMBOL(kxtf9_get_slave_descr); 它不应该通过出口符号“可见”吗? 包含上述代码的C文件没有头文件(我没有编写它,我只是找到了它并正在实现。他

当我遇到这个错误时,我正在将一些驱动程序嵌入Linux内核(我正在将设备添加到board文件中并注册它):

我在驱动程序文件中找到了上面的函数

struct ext_slave_descr *kxtf9_get_slave_descr(void)
{
    return &kxtf9_descr;
}
EXPORT_SYMBOL(kxtf9_get_slave_descr);
它不应该通过出口符号“可见”吗? 包含上述代码的C文件没有头文件(我没有编写它,我只是找到了它并正在实现。他们说它已经过测试,所以我假设不需要头文件


其余的代码可以完美地编译(因此它可以“看到”文件夹中的代码),并且包含上述代码的文件也会编译!

EXPORT\u SYMBOL
为动态链接导出符号。您遇到的不是链接错误,而是由于缺少函数声明而导致的编译错误。您必须为C文件编写头文件并包含该头文件,或者将函数声明为C您正在编译的文件

选项1:

kxtf9.h:

#ifndef KXTF9_H
#define KXTF9_H

struct ext_slave_descr *kxtf9_get_slave_descr(void);

#endif
您的_文件.c:

#include "kxtf9.h"
/* your code where you use the function ... */
struct ext_slave_descr *kxtf9_get_slave_descr(void);
/* your code where you use the function ... */
选项2:

您的_文件.c:

#include "kxtf9.h"
/* your code where you use the function ... */
struct ext_slave_descr *kxtf9_get_slave_descr(void);
/* your code where you use the function ... */
还请注意,文件kxtf9.c中的
EXPORT_符号
周围有
\ifdef\uuuu KERNEL\uuuu
,因此您必须正确设置构建环境(Makefile)-否则会出现链接错误。

最简单的工作示例: