对“i2c_smbus_read_block_data(int, unsigned char, unsigned char*)”的未定义引用
undefined reference to `i2c_smbus_read_block_data(int, unsigned char, unsigned char*)'
我正在尝试从 imu (mpu9250) 读取数据块,但是在构建时
g++ mpu.cpp -o mpu
我收到以下错误:
/tmp/cckh5V8w.o: In function 'imu::read_accel()':
mpu_mine9250.cpp:(.text._ZN3imu10read_accelEv[_ZN3imu10read_accelEv]+0x94): undefined reference to 'i2c_smbus_read_block_data(int, unsigned char, unsigned char*)'
collect2: error: ld returned 1 exit status ```
int addr = 0x68;
int mpu_file;
char mpu_filename[250];
snprintf(mpu_filename, 250, "/dev/i2c-0");
if (ioctl(mpu_file, I2C_SLAVE, addr) < 0){
exit(1);
}
__u8 buf[14];
__u8 reg = 0x3B;
int ans= i2c_smbus_read_block_data(mpu_file, reg, buf);
要包含我尝试过的库:
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
#include <i2c/smbus.h>
还有:
extern "C" {
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
#include <i2c/smbus.h>
}
我已经安装了 libi2c-dev、libi2c0 和 i2c-tools 包。
当使用 write(mpu_file, buf, 2)
或 read(mpu_file, buf, 1)
时它确实有效。
提前致谢!
解决方案是:
1.使用 extern C: 我使用的是 extern C,但也以常规方式包含它们,这导致了问题。
extern "C"
{
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
#include <i2c/smbus.h>
}
2。构建时链接库:
g++ -o mpu mpu_mine9250.cpp -li2c
我正在尝试从 imu (mpu9250) 读取数据块,但是在构建时
g++ mpu.cpp -o mpu
我收到以下错误:
/tmp/cckh5V8w.o: In function 'imu::read_accel()':
mpu_mine9250.cpp:(.text._ZN3imu10read_accelEv[_ZN3imu10read_accelEv]+0x94): undefined reference to 'i2c_smbus_read_block_data(int, unsigned char, unsigned char*)'
collect2: error: ld returned 1 exit status ```
int addr = 0x68;
int mpu_file;
char mpu_filename[250];
snprintf(mpu_filename, 250, "/dev/i2c-0");
if (ioctl(mpu_file, I2C_SLAVE, addr) < 0){
exit(1);
}
__u8 buf[14];
__u8 reg = 0x3B;
int ans= i2c_smbus_read_block_data(mpu_file, reg, buf);
要包含我尝试过的库:
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
#include <i2c/smbus.h>
还有:
extern "C" {
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
#include <i2c/smbus.h>
}
我已经安装了 libi2c-dev、libi2c0 和 i2c-tools 包。
当使用 write(mpu_file, buf, 2)
或 read(mpu_file, buf, 1)
时它确实有效。
提前致谢!
解决方案是:
1.使用 extern C: 我使用的是 extern C,但也以常规方式包含它们,这导致了问题。
extern "C"
{
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
#include <i2c/smbus.h>
}
2。构建时链接库:
g++ -o mpu mpu_mine9250.cpp -li2c