Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: с++ standard library
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
srm
написал програмку - всё компилится, но не грузится во время отладки. оказалось, что такое повторяется если использовать оператор new или другие функции стандартной библиотеки. довольно удивительно, я думал, что должно вылазить что-то типа unresolvet external symbol. вобщем вопрос: как подключить к проекту std библиотеку?
aaarrr
Для ARM существует не один тип компилятора, уточните.
srm
Цитата(aaarrr @ Jan 10 2010, 17:59) *
Для ARM существует не один тип компилятора, уточните.

ага, забыл. at91sam7s256
aaarrr
Компилятора.
srm
Цитата(aaarrr @ Jan 10 2010, 18:09) *
Компилятора.

keil 3.8
srm
вот проект. коментирую первую строчку - всё норм. с ней не грузится. magic %)
aaarrr
Для new нужен heap, а в стартапе у вас:
Код
Heap_Size       EQU     0x00000000

Поставьте туда разумное число, и будет счастье.
srm
Цитата(aaarrr @ Jan 10 2010, 23:38) *
Для new нужен heap, а в стартапе у вас:
Код
Heap_Size       EQU     0x00000000

Поставьте туда разумное число, и будет счастье.

ух ты! пасиб. заработало smile.gif))
srm
ещё одна проблемка. тут точно проблема с экспортом. undefined symbol vtable и Undefined symbol typeinfo. по идее, у меня в коде нет динамического преобразования типов, есть только наследование и виртуальный полиморфизм, так что хотелось бы вообще отключить генерацию RTTI. не знаю, можно ли это сделать в keil, но, например, в Visual Studio прокатывает. т.е. таблица виртуальных функций генерируется, а информация о типах - нет.

на сайте keil'a написана такая вещь:
Use the command-line option --vfemode=force_no_rtti to make the linker VFE aware and force the removal of all RTTI objects. In this mode all virtual functions are retained.

но мне это не нравится. по идее, виртуальные функции должны оставаться виртуальными, а тут написано иначе sad.gif((
Dima_G
Цитата(srm @ Jan 10 2010, 22:50) *
ух ты! пасиб. заработало smile.gif))


Была такая же проблема на другой платформе (BF537, VisualDSP)
Помогло в отладке следующее

Код
///////////////////////////////////////////////////////////////////////////////
// Hadler for NEW exceptions
///////////////////////////////////////////////////////////////////////////////
void My_new_handler() {Halt("NEW exceptions\n\r");}

///////////////////////////////////////////////////////////////////////////////
void main()
{
  set_new_handler(My_new_handler);


Цитата(srm @ Jan 11 2010, 06:25) *
на сайте keil'a написана такая вещь:
Use the command-line option --vfemode=force_no_rtti to make the linker VFE aware and force the removal of all RTTI objects. In this mode all virtual functions are retained.

но мне это не нравится. по идее, виртуальные функции должны оставаться виртуальными, а тут написано иначе sad.gif((


http://www.google.ru/language_tools?hl=ru
Вам в помощь smile.gif
srm
опция --vfemode=force_no_rtti не помогает - один фиг вылазит ошибка

Error: L6218E: Undefined symbol typeinfo for CTimerEvents (referred from main.o).
Error: L6218E: Undefined symbol vtable for CTimerEvents (referred from main.o).
sergeeff
RTTI никакого отношения к виртуальным функциям не имеет и нужна, действительно, чтобы заработало typeinfo и безопасный <dynamic_cast>. Учитывая, что к тому же RTTI сильно притормаживает программу, то его лучше избегать, тем более, что в emdedded мире и без этого чуда вполне можно обойтись.

CTimerEvents вы сами писали, или это из библиотеки без исходников?
srm
Цитата(sergeeff @ Jan 16 2010, 23:59) *
RTTI никакого отношения к виртуальным функциям не имеет и нужна, действительно, чтобы заработало typeinfo и безопасный <dynamic_cast>. Учитывая, что к тому же RTTI сильно притормаживает программу, то его лучше избегать, тем более, что в emdedded мире и без этого чуда вполне можно обойтись.

ну, именно за этим я и хочу его отключить, только не знаю как.

Цитата
CTimerEvents вы сами писали, или это из библиотеки без исходников?

я написал класс CTimer, он реализован по архитектуре MVC - генерирует эвенты на интерфейс CTimerEvets. как только создал виртуальные методы - кеил тут же начал требовать typeinfo и vtable. понятно, что они нафиг не нужны, если не юзаешь динамическое преобразование типов.
sergeeff
И что же вы такого написали в main()? Может приведете для анализа текст main и CTimerEvents? А то больно сложно судить о том, чего не видишь.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.