6

当我收到此错误时,我正在将一些驱动程序嵌入到 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文件没有头文件(我没有写,我只是在这里找到它,我正在实现。他们说它已经过测试所以我认为不需要头文件?

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

4

1 回答 1

10

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 ... */

另请注意,EXPORT_SYMBOL文件 kxtf9.c 中包含#ifdef __KERNEL__它,因此您必须正确设置构建环境(Makefile) - 否则您将收到链接错误。

于 2011-07-12T20:31:10.740 回答