Я не уверен, как правильно это сделать. Удаление -nostdlib из моей команды G ++/GCC работает и позволяет мне компилировать программы, которые используют функции STL, однако они не работают должным образом. Мягкое использование, кажется, в основном в порядке, но более тяжелое использование заставляет его начать хранение программы для уничтожения (
Код: Выделить всё
.textЭто мой текущий сценарий линкера: < /p>
ENTRY(riscvcoreinitfunction);
MEMORY
{
ram (rwx) : ORIGIN = 0x00000000, LENGTH = 0x003E8000
}
STACK_SIZE = 0xFFFF;
SECTIONS
{
.text :
{
KEEP(*(.vector*))
*(.text*)
} > ram
.bss (NOLOAD) :
{
*(.bss*)
*(COMMON)
} > ram
.data :
{
*(.data*);
} > ram
.stack (NOLOAD) :
{
. = ALIGN(8);
. = . + STACK_SIZE;
. = ALIGN(8);
} > ram
__global_pointer$ =. + 0x10000;
}
< /code>
и моя текущая функция инициирования: < /p>
extern "C"
{
void riscvcoreinitfunction()
{
asm volatile
(" .option push \t\n\
.option norelax \t\n\
1:auipc gp, %pcrel_hi(__global_pointer$) \t\n\
addi gp, gp, %pcrel_lo(1b) \t\n\
.option pop \t\n\
");
asm volatile("" ::: "memory");
main();
}
}
< /code>
И это то, что я использую для вызова g ++: < /p>
riscv64-unknown-elf/bin/riscv64-unknown-elf-g++ -nostartfiles -march=rv32i -mabi=ilp32 -T linkerscript.ld -o bin.elf
< /code>
Я нашел учебник в Интернете для реализации Newlib на моей платформе, но это на самом деле не работает для меня, и мне не хватает подробностей, таких как какие переменные мне нужны в моем Linkerscript. Кроме того, в учебном пособии, такие как SBRK, не определены, где в моей программе у них уже есть реализация по какой -то причине. (Итак, как мне заменить их при необходимости?)
Может ли кто -нибудь помочь мне в добавлении поддержки всех основных необходимых функций C/C ++ и функций STL?
Подробнее здесь: https://stackoverflow.com/questions/623 ... v-platform
Мобильная версия