Непонятная ошибка при компиляции gcc
От: Helga_F Россия  
Дата: 13.06.06 11:39
Оценка:
Я пытаюсь откомпилировать исходники драйвера для нестандартной платы компилятором gcc (версия 2.95.2) . Имеются скрипты и makefile для компиляции. В принципе достаточно запустить скрипт и все… Но не тут-то было. Дело в том, что я компилирую в Виндах, используя Cygwin.

При компиляции появляется ошибка следующего содержания: dereferencing pointer to incomplete type. Причем данная ошибка появляется не в строке, где происходит объявление переменной данного типа (это структура), а в момент обращения к ее полям.

Помогите разобраться, так как я никогда раньше не компилировала с помощью gcc, и никогда такой ошибки не встречала.
Могу сказать точно, что файл, где объявлена данная структура включен в файл, в котором происходит обращение к ее полям. В файле makefile стоит ключ компиляции -l и прописан путь где лежит данный файл.
Может кто-нибудь может указать мне направление, куда копать. Заранее спасибо.
Re: Непонятная ошибка при компиляции gcc
От: little_alex  
Дата: 13.06.06 15:23
Оценка:
Здравствуйте, Helga_F, Вы писали:

H_F>Я пытаюсь откомпилировать исходники драйвера для нестандартной платы компилятором gcc (версия 2.95.2) . Имеются скрипты и makefile для компиляции. В принципе достаточно запустить скрипт и все… Но не тут-то было. Дело в том, что я компилирую в Виндах, используя Cygwin.


Если это драйвера ядра Linux, то скомпилировать под Cygwin не получится, так как
1) нет заголовочных файлов самого ядра
2) формат exe и dll файлов отличается от формата исполняемых файлов linux (elf)
3) ......... и еще куча проблем
Re[2]: Непонятная ошибка при компиляции gcc
От: Cyberax Марс  
Дата: 13.06.06 15:40
Оценка:
little_alex wrote:
> Если это драйвера ядра Linux, то скомпилировать под Cygwin не получится,
> так как
> 1) нет заголовочных файлов самого ядра
1. Копируются из Линукса.

> 2) формат exe и dll файлов отличается от формата исполняемых файлов

> linux (elf)
Есть замечательная штука — кросс-компилятор.

> 3) ......... и еще куча проблем

Решаемы.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[2]: Непонятная ошибка при компиляции gcc
От: Аноним  
Дата: 13.06.06 17:15
Оценка:
Здравствуйте, little_alex, Вы писали:

_>Если это драйвера ядра Linux, ...

Вообще-то нет.
Попробую объяснить. Дело в том что я компилирую данные драйвера для ОC реального времени VxWorks.
Производитель платы утверждает, что драйвера могут работать под даннуй ОС.
В качестве компилятора можно использовать gcc, поэтому я и обратилась на этот форум с просьбой помочь.
Re[2]: Непонятная ошибка при компиляции gcc
От: Helga_F Россия  
Дата: 13.06.06 17:18
Оценка:
Пардон, забыла зарегистрироваться.
Здравствуйте, little_alex, Вы писали:

_>Если это драйвера ядра Linux...


Вообще-то нет.
Попробую объяснить. Дело в том что я компилирую данные драйвера для ОC реального времени VxWorks.
Производитель платы утверждает, что драйвера могут работать под даннуй ОС.
В качестве компилятора можно использовать gcc, поэтому я и обратилась на этот форум с просьбой помочь.
Re[3]: Непонятная ошибка при компиляции gcc
От: Cyberax Марс  
Дата: 13.06.06 17:36
Оценка:
Helga_F wrote:
> Вообще-то нет.
> Попробую объяснить. Дело в том что я компилирую данные драйвера для ОC
> реального времени VxWorks.
> Производитель платы утверждает, что драйвера могут работать под даннуй ОС.
> В качестве компилятора можно использовать gcc, поэтому я и обратилась на
> этот форум с просьбой помочь.
Ага, ситуация проясняется. Можно кусок кода, вызывающий ошибку?
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[3]: Непонятная ошибка при компиляции gcc
От: raskin Россия  
Дата: 13.06.06 17:39
Оценка:
Helga_F wrote:
> Вообще-то нет.
> Попробую объяснить. Дело в том что я компилирую данные драйвера для ОC
> реального времени VxWorks.
> Производитель платы утверждает, что драйвера могут работать под даннуй ОС.
> В качестве компилятора можно использовать gcc, поэтому я и обратилась на
> этот форум с просьбой помочь.
Какой gcc стоит? Cygwin'овский по умолчанию или кросс-gcc?
Posted via RSDN NNTP Server 2.1 beta
Re[4]: Непонятная ошибка при компиляции gcc
От: Helga_F Россия  
Дата: 14.06.06 15:18
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Ага, ситуация проясняется. Можно кусок кода, вызывающий ошибку?

Сам код давать бесмысленно.
В одном файле описана тип-структура (указатель на структуру).
В другом файле объявлена переменная данного типа — здесь компилятор не выдает ошибку.
Но далее во всех местах кода при любом обращении к полям данной переменной появляется данная ошибка.
Re[5]: Непонятная ошибка при компиляции gcc
От: Cyberax Марс  
Дата: 14.06.06 15:26
Оценка:
Helga_F wrote:
> C>Ага, ситуация проясняется. Можно кусок кода, вызывающий ошибку?
> Сам код давать бесмысленно.
> В одном файле описана тип-структура (указатель на структуру).
> В другом файле объявлена переменная данного типа — здесь компилятор не
> выдает ошибку.
> Но далее во всех местах кода при любом обращении к полям данной
> переменной появляется данная ошибка.
Понятно. Подключите h-файл с _определением_ структуры во все файлы, где
выдается ошибка.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[6]: Непонятная ошибка при компиляции gcc
От: Helga_F Россия  
Дата: 14.06.06 15:39
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Понятно. Подключите h-файл с _определением_ структуры во все файлы, где

C>выдается ошибка.

Дело в том, что он везде подключен. Я проверяла
Re[4]: Непонятная ошибка при компиляции gcc
От: Helga_F Россия  
Дата: 14.06.06 15:41
Оценка:
Здравствуйте, raskin, Вы писали:

R>Какой gcc стоит? Cygwin'овский по умолчанию или кросс-gcc?


А вот этого я как раз не знаю. Все досталось по наследству безо всяких пояснений.

Пыталась создать кросс-gcc сама, но возникло куча проблем при компиляции
Re[7]: Непонятная ошибка при компиляции gcc
От: Cyberax Марс  
Дата: 14.06.06 15:46
Оценка:
Helga_F wrote:
> C>Понятно. Подключите h-файл с _определением_ структуры во все файлы, где
> C>выдается ошибка.
> Дело в том, что он везде подключен. Я проверяла
Тогда смотрите на неправильные кольцевые зависимости (если ошибка внутри
h-файла). Еще посмотрите не отключено ли определение каким-нибудь
#ifdef'ом.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[8]: Непонятная ошибка при компиляции gcc
От: Helga_F Россия  
Дата: 14.06.06 17:10
Оценка:
Здравствуйте, Cyberax, Вы писали:

C> Еще посмотрите не отключено ли определение каким-нибудь

C>#ifdef'ом.

Я так понимаю, если данное определение было бы отключено, то ошибка выдавалась при объявлении переменной данного типа,
а не при обращении к ее полям
Re[9]: Непонятная ошибка при компиляции gcc
От: Cyberax Марс  
Дата: 14.06.06 17:13
Оценка:
Helga_F wrote:
> C> Еще посмотрите не отключено ли определение каким-нибудь
> C>#ifdef'ом.
> Я так понимаю, если данное определение было бы отключено, то ошибка
> выдавалась при объявлении переменной данного типа,
> а не при обращении к ее полям
Нет.

При объявлении указателя достаточно неполного типа (incomplete type):
struct A
{
    struct B *something; //Неполный тип
};

//Попытка обращения к полям типа B вернет ошибку:
A str;
str.something->something2=NULL; //Будет ошибка

//А вот после этого определения все должно быть ОК:
struct B
{
    struct A *something2;
};
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[9]: Непонятная ошибка при компиляции gcc
От: raskin Россия  
Дата: 14.06.06 17:25
Оценка:
Helga_F wrote:
> C> Еще посмотрите не отключено ли определение каким-нибудь
> C>#ifdef'ом.
>
> Я так понимаю, если данное определение было бы отключено, то ошибка
> выдавалась при объявлении переменной данного типа,
> а не при обращении к ее полям

Нет. Переменная объявлена как
struct horror* cute;
Такое ветка 2.* позволяла делать до определения в надежде на последующее
счастье (3.* тоже, 4.* уже нет). После этого идёт cute->field , а тут
только оказалось, что счастье не последовало.

Кстати, посмотрите в makefile, как вызывается "as" (или ld). Если просто
/usr/bin/as, то плохо. Если хитрее — найти где он лежит и вызвать с
ключом --version/--help. В выводе поискать слово target. Какой формат
нужен VxWorks и какой процессор — не знаю, но если это не
i386-linux/cygwin-elf (что скорее всего) , то есть шанс отличить
Posted via RSDN NNTP Server 2.1 beta
Re[10]: Непонятная ошибка при компиляции gcc
От: Helga_F Россия  
Дата: 14.06.06 17:51
Оценка:
Здравствуйте, Cyberax,

В коде это выглядит так:


struct sci_unit {
  unsigned32      deviceNo;
  unsigned8       unit_no;        
  ... // объявление других полей
 };

typedef volatile struct sci_unit *Sci_p; 


// в другом файле:

Sci_p sci_p;

sci_p->unit_no=0;  // вот здесь ошибка dereferencing pointer to incomplete type
Re[11]: Непонятная ошибка при компиляции gcc
От: raskin Россия  
Дата: 14.06.06 17:54
Оценка:
Helga_F wrote:
> struct sci_unit {
> unsigned32 deviceNo;
> unsigned8 unit_no;
> ... // объявление других полей
> };
>
> typedef volatile struct sci_unit *Sci_p;
>
>
> // в другом файле:
>
> Sci_p sci_p;
>
> sci_p->unit_no=0; // вот здесь ошибка /dereferencing pointer to incomplete type/
В других полях структур нет? Указатели можно, а просто структуры надо
проверить.
Posted via RSDN NNTP Server 2.1 beta
Re[11]: Непонятная ошибка при компиляции gcc
От: Cyberax Марс  
Дата: 14.06.06 17:56
Оценка:
Helga_F wrote:
> В коде это выглядит так:
> struct sci_unit {
> unsigned32 deviceNo;
> unsigned8 unit_no;
> ... // объявление других полей
> };
> typedef volatile struct sci_unit *Sci_p;
А если убрать volatile? Может какие-то глюки 2.95?

> // в другом файле:

> Sci_p sci_p;
> sci_p->unit_no=0; // вот здесь ошибка /dereferencing pointer to incomplete type/
А что будет если перед этим просто тупо cut&paste'ом вставить:
  struct sci_unit {
    unsigned32      deviceNo;
    unsigned8       unit_no;
    ... // объявление других полей
   };
  typedef volatile struct sci_unit *Sci_p;

?
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[3]: Непонятная ошибка при компиляции gcc
От: little_alex  
Дата: 15.06.06 16:09
Оценка:
Здравствуйте, Cyberax, Вы писали:

>> 3) ......... и еще куча проблем

C>Решаемы.

Интересно сколько займет времени создание нормального окружения для сборки модуля ядра под Cygwin?
И зачем это нужно?
Re[4]: Непонятная ошибка при компиляции gcc
От: Cyberax Марс  
Дата: 15.06.06 16:52
Оценка:
little_alex wrote:
>> > 3) ......... и еще куча проблем
> C>Решаемы.
> Интересно сколько займет времени создание нормального окружения для
> сборки модуля ядра под Cygwin?
> И зачем это нужно?
Например, для встраиваемого устройства, где все равно нужно использовать
кросс-компиляцию.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.