Здравствуйте, 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 Нам повезло, так сами функции инициализаторы были сделаны, забыли только их вызвать.