gpt4 book ai didi

链接全局结构数组时出现编译错误

转载 作者:太空宇宙 更新时间:2023-11-04 03:24:16 24 4
gpt4 key购买 nike

我试图在 somedriver_cardSpecific.c 中定义一个结构数组,在 somedriver.h 中声明它,然后在 somedriver.c< 中使用它。但是我在 somedriver.c 中遇到编译错误:

error: array '__mod_i2c__somedriver_idtable_device_table' assumed to have one element [-Werror]
extern const typeof(name) __mod_##type##__##name##_device_table

in expansion of macro 'MODULE_DEVICE_TABLE'
MODULE_DEVICE_TABLE(i2c, somedriver_idtable);

以下是相关的代码:

somedriver_cardSpecific.c

#include <linux/i2c.h>

#include "somedriver.h"

struct i2c_device_id somedriver_idtable[] = {
{ "somedevice_1", 0 },
{ "somedevice_2", 1 },
{ },
};

somedriver.h

#include <linux/i2c.h>

extern struct i2c_device_id somedriver_idtable[];

somedriver.c

#include "somedriver.h"

MODULE_DEVICE_TABLE(i2c, somedriver_idtable);

不确定为什么会出现编译错误。我是否做错了这个链接:somedriver_idtable 的定义是否需要确定的大小?还是 MODULE_DEVICE_TABLE 宏的约束?

如果您想知道为什么在这个 Linux 设备驱动程序中我将 i2c_device_id 表与 MODULE_DEVICE_TABLE 分开:我正在尝试重构代码,以便以后具有不同数量 i2c 设备的板可以创建自己的somedriver_cardSpecific.c 文件并编译/链接它。

谢谢你的帮助。

编辑:该宏在 Linux 内核中定义:linux/module.h。 http://lxr.free-electrons.com/source/include/linux/module.h#L212

210 #ifdef MODULE
211 /* Creates an alias so file2alias.c can find device table. */
212 #define MODULE_DEVICE_TABLE(type, name) \
213 extern const typeof(name) __mod_##type##__##name##_device_table \
214 __attribute__ ((unused, alias(__stringify(name))))
215 #else /* !MODULE */
216 #define MODULE_DEVICE_TABLE(type, name)
217 #endif

最佳答案

你收到错误只是因为你有将所有警告视为错误的标志。解决这个问题的一种方法是禁用这样的标志,但我建议作为一种更好的方法在 header 和 .c 中显式声明数组大小 [3],这应该会使警告消失并且错误与它。

关于链接全局结构数组时出现编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42537007/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com