кросс-компилятор raspberry pi неполный тип, в то время как собственный компилятор работает

Я установил кросс-компилятор для своего Raspberry Pi, который нашел здесь: Установка Raspberry Pi Кросс-компилятор

Теперь это работает нормально, вплоть до того момента, когда я хочу использовать библиотеку 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;

Любые идеи о возможной причине или решение о том, как я могу заставить кросс-компилятор работать правильно?


person Kees    schedule 06.08.2017    source источник


Ответы (2)


Моим первым подозрением будут разные версии GCC между RPi и вашим кросс-компилятором; Известно, что GCC со временем меняет способ обработки операторов #include.

За исключением различий в версиях, убедитесь, что включаемый файл хоста не был взят где-то случайно.

person madscientist159    schedule 06.08.2017
comment
Я проверил версии компилятора: - кросс-компилятор - GNU 4.8.3 - собственный компилятор - GNU 4.9.4 Однако в примечаниях к выпуску не обсуждаются какие-либо изменения, касающиеся обработки #includes или структур. Кроме того, используемые заголовочные файлы идентичны. Любые другие идеи? - person Kees; 08.08.2017

Проблема решилась добавлением

#include <linux/i2c.h>

перед заголовками i2c-dev. До сих пор не знаю, почему два компилятора дали разные результаты...

person Kees    schedule 13.08.2017