реклама на сайте
подробности

 
 
> Проблемы при компиляции и компоновке
NikAn
сообщение Jul 14 2008, 13:35
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 24-06-08
Пользователь №: 38 525



Добрый день (вечер/ночь/утро)!

Пишу на С++.

Проблема первая: Если обьект, определенного мной типа, расположить вне main (т.е. он будет глобальным), компоновщик генерирует странный elf файл. Странность его в том, что утилита arm-elf-objcopy делает из него бинарный файл размером 1ГБ (~1КБ эффективного кода + куча нулей).


Проблема вторая: Имеется такой код
int main(void)
{
CHIP Chip;

SINGLE_PORT X13_20;
// X13_20.Init(0, OUTPUT, PULL_UP);
// X13_20.NewConnect(&Chip, P0, 4);

/*.........................*/
}

Если раскоментировать методы обьекта X13_20, компоновщик arm-elf-ld вываливает следующие сообщения:
main.cpp:46: undefined reference to `_Unwind_SjLj_Register'
main.cpp:67: undefined reference to `_Unwind_SjLj_Resume'
main.cpp:67: undefined reference to `__gxx_personality_sj0'
строки 46 и 67 соответственно начало и конец main

Подскажите, чтобы это могло означать

Заранее благодарен

Косяк видимо связан с явными деструкторами (см. http://electronix.ru/forum/index.php?showtopic=49880)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
NikAn
сообщение Jul 15 2008, 13:21
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 24-06-08
Пользователь №: 38 525



Спасибо. Флаги -fno-exceptions -fno-rtti помогли.

Цитата
Посмотрите в .map, в какую входную секцию попадает ваш объект. И в скрипте линкера - в какую выходную секцию линкуется эта входная и как объявлена выходная секция.


Извините, не понял. Вот фрагмент main.map
.bss 0x40000004 0x154
*(.bss)
.bss 0x40000004 0x0 strup.o
.bss 0x40000004 0x0 std_def.o
.bss 0x40000004 0x0 ChipResource.o
.bss 0x40000004 0x0 SinglePort.o
.bss 0x40000004 0x154 main.o
0x40000008 InputBuf
0x40000144 Chip
0x40000138 OutputBufTail
0x4000010c InputBufTail
0x40000140 flag
0x40000004 TIMER0_IntFunc
и т.д.
Глобальный объект Chip вызывает описанный выше косяк

А вот скрипт линкера:
MEMORY
{
rom (rx) : ORIGIN = 0x00000000, LENGTH = 512K
ram (rw) : ORIGIN = 0x40000000, LENGTH = 64K
}
SECTIONS
{
.text :
{
*(.text)
} >rom
.data :
{
*(.data)
} >ram
.bss :
{
*(.bss)
}
}
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 09:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01351 секунд с 7
ELECTRONIX ©2004-2016