arm-none-eabi-g ++ вызывающий глобальный конструктор - PullRequest
2 голосов
/ 17 ноября 2011

Я пытаюсь перенести приложение c ++ на доску с помощью инструментов gcc (используя RTOS).Но мои статические конструкторы const не вызываются.

Простой код:

class TestClass {
public:
    TestClass();
    TestClass(int m);
    TestClass(const TestClass& other);
    ~TestClass();
    int getM() const;
    const TestClass& operator = (const TestClass& other);
private:
    int m;    
};

class TestInitClass {
    static const TestClass TestClassObj;
};

const TestClass TestInitClass::TestClassObj = TestClass(5);

Я предоставляю определения классов.Но когда я вызываю это с помощью TestInitClass :: TestClassObj.getM (), он возвращает мне 0.

Есть несколько проблем:

  1. Мой статический констант размещается в секции .bss.Он не попадает в разделы .ctors (это может быть проблема со скриптом компоновщика?!)
  2. И даже если он попадает в раздел .ctors, как мне вызвать эти конструкторы
  3. Когда я использую staticбиблиотека c ++, как их называть?

Спасибо

Ответы [ 2 ]

1 голос
/ 17 ноября 2011
0 голосов
/ 17 ноября 2011

Чтобы использовать gcc и RTOS, у вас должен быть скрипт "ld", которые описывают, куда помещают что-то в память, например, для обработки кода глобальных конструкторов.

О вызове конструкторов. Вы можете посмотреть исходный код eCos:
http://ecos.sourceware.org/
Для архитектуры arm вы можете посмотреть на vectors.S и hal_misc.c в каталоге packages / hal / arm / arch / current / src. vector.S содержит что-то вроде:

bl      cyg_hal_invoke_constructors

и в реализации hal_mics.c этой функции.

...