Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: arm-gcc cin/cout
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
dimka76
Подскажите как использовать cin/cout в ARM-GCC.

Линкер выдает такие ошибки
Код
In function `operator<< <std::char_traits<char> >':
c:\program files\codesourcery\sourcery g++ lite\bin\../lib/gcc/arm-none-eabi/4.5.1/../../../../arm-none-eabi/include/c++/4.5.1/ostream:513: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int)'
obj/main.o: In function `std::ostream::operator<<(std::ostream& (*)(std::ostream&))':
c:\program files\codesourcery\sourcery g++ lite\bin\../lib/gcc/arm-none-eabi/4.5.1/../../../../arm-none-eabi/include/c++/4.5.1/ostream:113: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
obj/main.o: In function `main':
D:\Dmitry\Project\ARM7\GCC\LPC11xx_Cpp_Proba\STM32_Proba_CPP/main.cpp:78: undefined reference to `std::cout'
obj/main.o: In function `__static_initialization_and_destruction_0':
c:\program files\codesourcery\sourcery g++ lite\bin\../lib/gcc/arm-none-eabi/4.5.1/../../../../arm-none-eabi/include/c++/4.5.1/iostream:73: undefined reference to `std::ios_base::Init::Init()'
c:\program files\codesourcery\sourcery g++ lite\bin\../lib/gcc/arm-none-eabi/4.5.1/../../../../arm-none-eabi/include/c++/4.5.1/iostream:73: undefined reference to `std::ios_base::Init::~Init()'
alx2
Цитата(dimka76 @ Dec 2 2010, 13:29) *
Подскажите как использовать cin/cout в ARM-GCC.

Код
kolez% cat test.cpp
#include <iostream>
int main()
{
  std::cout << "Hello, World!" << std::endl;
  return 0;
}
kolez% arm-elf-g++ -Wall test.cpp
kolez%

Цитата(dimka76 @ Dec 2 2010, 13:29) *
Линкер выдает такие ошибки

Странно... Эти символы должны быть в libstdc++.a.
Посмотрите в map-файле, может линкер берет не ту libstdc++ (где-то неверные пути)?...
dimka76
Цитата(alx2 @ Dec 3 2010, 09:44) *
Странно... Эти символы должны быть в libstdc++.a.
Посмотрите в map-файле, может линкер берет не ту libstdc++ (где-то неверные пути)?...


Спасибо. С этим я разобрался. Я изначально линкер вызывал через gcc, а надо было через g++.
Но после исправления появились новые ошибки.
Вот
Код
arm-none-eabi-g++ -mcpu=cortex-m3 -mthumb -nostartfiles -Wl,--gc-sections,-Map=b
in/STM32_CPP_PROBA.map,-cref,-u,Reset_Handler  -T link.ld -Wl,--defsym,__dso_han
dle=0  -o bin/STM32_CPP_PROBA.elf obj/startup_stm32f10x_md.o obj/stf_syscalls_mi
nimal.o obj/core_cm3.o obj/USART.o obj/system_stm32f10x.o obj/main.o obj/test.o
c:/program files/codesourcery/sourcery g++ lite/bin/../lib/gcc/arm-none-eabi/4.5
.1/../../../../arm-none-eabi/bin/ld.exe: bin/STM32_CPP_PROBA.elf section `.text'
will not fit in region `rom'
c:/program files/codesourcery/sourcery g++ lite/bin/../lib/gcc/arm-none-eabi/4.5
.1/../../../../arm-none-eabi/bin/ld.exe: region `rom' overflowed by 186372 bytes

c:/program files/codesourcery/sourcery g++ lite/bin/../lib/gcc/arm-none-eabi/4.5
.1/thumb2\libgcc.a(unwind-arm.o): In function `get_eit_entry':
unwind-arm.c:(.text+0x13e): undefined reference to `__exidx_end'
unwind-arm.c:(.text+0x142): undefined reference to `__exidx_start'
unwind-arm.c:(.text+0x146): undefined reference to `__exidx_start'
unwind-arm.c:(.text+0x14a): undefined reference to `__exidx_end'


Вот еще map файлНажмите для просмотра прикрепленного файла
AHTOXA
Не помещается, чего ж непонятногоsmile.gif
Бросьте это гнилое занятие. libstdc++ тянет за собой исключения, а это неимоверно прожорливая штука в масштабах микроконтроллеров.
Напишите свой маленький cout, и будет хорошоsmile.gif

Что касается __exidx_*, то это скрипт линкера не дописан.
Добавьте туда такую секцию:
Код
    __exidx_start = .;
    .ARM.exidx :
    {
        *(.ARM.exidx* .gnu.linkonce.armexidx.*)
    } >FLASH
    __exidx_end = .;

dimka76
Цитата(AHTOXA @ Dec 3 2010, 18:11) *
Не помещается, чего ж непонятногоsmile.gif

То что не помещается я понял. Вопрос в том нельзя ли это победить.
Кстати памяти у моего контроллера 64 КБайта.
Цитата(AHTOXA @ Dec 3 2010, 18:11) *
Бросьте это гнилое занятие. libstdc++ тянет за собой исключения, а это неимоверно прожорливая штука в масштабах микроконтроллеров.

Вот теперь понятна причина невлизания.
Цитата(AHTOXA @ Dec 3 2010, 18:11) *
Что касается __exidx_*, то это скрипт линкера не дописан.

Раз уж не влизает, то и смысла править нет :-)

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.