Re: не вызывается конструктор для статического объекта
От: avbochagov Россия  
Дата: 23.01.12 06:47
Оценка:
Здравствуйте, levsh, Вы писали:

l> Компилятор GCC под ARM.

l> В обычном GCC все работает.

Было у нас такое, и тоже embeded. Поставщик системы неправильно собрал поддержку для C++.

Для инициализации статических объектов надо вызвать сгенерированные функции, который были сложены в отдельный сегмент — тут вам надо посмотреть файлик, с описанием сегментов приложения (что-то типа mapping.def).

У нас получилась вот такая функция, которая вызывала функции инициализации статических объектов.

/**
 * \brief Fix for C++ constructors calls
 * 
 * \warning This fix is required ONLY for XXX platform.
 */
void do_ctor_calls()
{
    static bool ctor_call_once = false;
    
    if(ctor_call_once == true) return;
    
    typedef void (*call_ctor_t)(void);
    extern call_ctor_t __ctors_start__[];
    extern call_ctor_t __ctors_end__[];
    
    call_ctor_t * ctor_call = __ctors_start__;
    while(ctor_call < __ctors_end__)
    {
        (*ctor_call)();
        ctor_call++;
    }
    
    ctor_call_once = true;
}


PS Нам повезло, так сами функции инициализаторы были сделаны, забыли только их вызвать.
avalon 1.0rc3 rev 416, zlib 1.2.3
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.