Ошибка компиляции

Тема в разделе "WASM.UNIX", создана пользователем featurelles, 1 мар 2010.

  1. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    Ктонить сталкивался с подобной ошибкой при компиляции модуля???
    WARNING: "__divdi3" [/home/featurelles/module.ko] undefined!

    Она возникает по непонятным мне причинам)))
    Например, если в функции есть определение long i=0;
    и сделать i++ nj то вылезает подобная ошибка....
    если убрать инкримент, то всё компилируется нормально и работает...
    Также эта ошибка возникает, непонятно изза чего))
    например можно, вызвать printk("ПРИНТК"); или memset
    И при компиляции будет эта ошибка...а если их убрать ( непонятно вообще ) то эта ошибка исчезнет.

    Собственно вопрос.
    ЧТО это за ХЗ ???
     
  2. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    Пример

    unsigned long i=0;
    for(i=0; i<=struct_count; )
    {
    //i++; // ЕСЛИ эту строку не закомментировать, то вылазит WARNING: "__divdi3"
    }



    компилятор GCC
     
  3. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    проблема решена. =)
     
  4. Phuntik

    Phuntik New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2008
    Сообщения:
    318
    Хоть бы рассказал уж тогда, от чего возникает ошибка WARNING: "__divdi3" [/home/featurelles/module.ko] undefined! =)
     
  5. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    Phuntik
    Как знал, что всёже зададут этот вопрос..
    и отвечаю)

    Я так и не понял, почему эта ошибка вылезает, при всяких инкриментах и вызовах функций...
    но WARNING: "__divdi3" выдаётся при делении различных типов. В моём случае ( loff_t ) на unsigned long
    Тоесть перед (на расстоянии нескольких строк кода)
    Код (Text):
    1. unsigned long i=0;
    2. for(i=0; i<=struct_count; )
    3.   {
    4.     //i++;   // ЕСЛИ эту строку не закомментировать, то вылазит WARNING: "__divdi3"
    5.   }
    был код деления, значений ( loff_t ) на unsigned long

    И при инкрименте i++ выдавалась подобная ошибка.
     
  6. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Скорее всего дело в оптимизации. С i наверное деление вообще было не нужно, а вызов printf/k "рвет" непрерывную оптимизацию, компилер не может вычислить из "констант" и ставит деление.