RaspberryPi:C 用户空间中对“i2c_smbus_read*”函数的未定义引用
RaspberryPi: undefined reference to `i2c_smbus_read*' functions in C userspace
我正在尝试编译一个用户空间 C 源文件,它在 Raspberry Pi 3B+ 内核 5.10.63-v7+
中使用 i2c_smbus_read_*
和 i2c_smbus_write_*
函数。根据 this Linux kernel 文档,这应该是可能的。我已经安装了 libi2c-dev
.
如果我使用:
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
#include <i2c/smbus.h>
我运行gcc myfile.c -o myfile
,我得到:
/usr/bin/ld: /tmp/ccIWkqsK.o: in function `i2c_read':
myfile.c:(.text+0x84): undefined reference to `i2c_smbus_read_byte_data'
/usr/bin/ld: /tmp/ccIWkqsK.o: in function `i2c_write':
myfile.c:(.text+0x160): undefined reference to `i2c_smbus_write_block_data'
collect2: error: ld returned 1 exit status
可能是哪个问题?
请注意,这些函数存在于我的 /usr/include/i2c/smbus.h
:
...
extern __s32 i2c_smbus_read_byte_data(int file, __u8 command);
extern __s32 i2c_smbus_write_byte_data(int file, __u8 command, __u8 value);
extern __s32 i2c_smbus_read_word_data(int file, __u8 command);
...
我同意您在 C 程序中不需要 extern "C"
。检查您的 header 并查看您的 header 是否将函数定义为 inline
。如果它只是声明它,你需要找出哪个库是在哪个库中定义的函数和link你程序中的库
编辑: 我看到你已经更新了问题。在这种情况下,您需要 link i2c 库类似于他们所做的 here。只需在您的 gcc 命令中添加一个参数:-li2c
.
我正在尝试编译一个用户空间 C 源文件,它在 Raspberry Pi 3B+ 内核 5.10.63-v7+
中使用 i2c_smbus_read_*
和 i2c_smbus_write_*
函数。根据 this Linux kernel 文档,这应该是可能的。我已经安装了 libi2c-dev
.
如果我使用:
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
#include <i2c/smbus.h>
我运行gcc myfile.c -o myfile
,我得到:
/usr/bin/ld: /tmp/ccIWkqsK.o: in function `i2c_read':
myfile.c:(.text+0x84): undefined reference to `i2c_smbus_read_byte_data'
/usr/bin/ld: /tmp/ccIWkqsK.o: in function `i2c_write':
myfile.c:(.text+0x160): undefined reference to `i2c_smbus_write_block_data'
collect2: error: ld returned 1 exit status
可能是哪个问题?
请注意,这些函数存在于我的 /usr/include/i2c/smbus.h
:
...
extern __s32 i2c_smbus_read_byte_data(int file, __u8 command);
extern __s32 i2c_smbus_write_byte_data(int file, __u8 command, __u8 value);
extern __s32 i2c_smbus_read_word_data(int file, __u8 command);
...
我同意您在 C 程序中不需要 extern "C"
。检查您的 header 并查看您的 header 是否将函数定义为 inline
。如果它只是声明它,你需要找出哪个库是在哪个库中定义的函数和link你程序中的库
编辑: 我看到你已经更新了问题。在这种情况下,您需要 link i2c 库类似于他们所做的 here。只需在您的 gcc 命令中添加一个参数:-li2c
.