【问题标题】:cross compiler raspberry pi incomplete type while native compiler works本机编译器工作时交叉编译器树莓派不完整类型
【发布时间】:2017-08-13 20:53:32
【问题描述】:

我为我的树莓派设置了一个交叉编译器,我在这里找到的那​​个:Installing Raspberry Pi Cross-Compiler

现在一切正常,直到我想使用 I2c 库 (i2c-dev.h)。

使用 arm-linux-gnueabihf-g++ 编译器编译以下代码时,出现错误:

In file included from src/I2c.cpp:8:0:
src/../Include/I2c.h:29:18: error: field ‘message’ has incomplete type
   struct i2c_msg message;
                  ^

同时,当我在 raspi 上编译代码时,它只是运行。

#ifndef I2C_H_
#define I2C_H_

#include <linux/i2c-dev.h> // Defines i2c_msg
#include ...

using namespace std;


typedef struct {
    struct i2c_msg message;

    void (*callback)(int);
    int messageID;

} t_msgQueue;

关于可能原因的任何想法,或关于如何使交叉编译器正常工作的解决方案?

【问题讨论】:

    标签: c++ cross-compiling


    【解决方案1】:

    我的第一个怀疑是 RPi 和您的交叉编译器之间的 GCC 版本不同;众所周知,GCC 会随着时间的推移改变它处理 #include 语句的方式。

    除非版本不同,请检查以确保主机包含文件没有被意外拾取。

    【讨论】:

    • 我检查了编译器版本: - 交叉编译器是 GNU 4.8.3 - 本机编译器是 GNU 4.9.4 然而,发行说明中没有讨论关于处理 #includes 或结构的任何更改。此外,使用的头文件是相同的。还有其他想法吗?
    【解决方案2】:

    问题通过添加解决了

    #include <linux/i2c.h>
    

    在 i2c-dev 标头之前。仍然不知道为什么两个编译器会给出不同的结果...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-19
      • 2013-12-12
      • 1970-01-01
      • 2021-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多