2016-09-01 2 views
0

У меня есть синтаксическая ошибка в строке 8
Я прочитал GNU docs относительно синтаксиса и удалось решить ошибку синтаксиса, но получил Несовместимость вопросы
Вот мой сценарий:Синтаксическая ошибка в сценарии компоновки

ENTRY (loader) 
OUTPUT ("kernel.bin") 

addr = 0x100000; 
SECTIONS 
{ 
     .text addr: 
     ALIGN(0x1000) 
     { 
      *(.text*); 
      *(.rodata*); 
     } 

     .data: 
     ALIGN(0x1000) 
     { 
      *(.data*); 
     } 

     .bss: 
     ALIGN(0x1000) 
     { 
      *(.bss*); 
     } 
} 

Пожалуйста, простите меня, я просто пытаюсь запуска с OSDeving с образцом Hello World

+0

Вы можете добавить сообщение об ошибке вы получите на свой вопрос? – fuz

+1

@FUZxxl он просто говорит ** ld: linker.ld: 8: ошибка синтаксиса ** Ничего, что может помочь Я думаю –

+0

Можете ли вы попробовать и удалить 'addr' после' .text'? – fuz

ответ

1

Вот что мой Компоновщик сценарий выглядел, прежде чем я переехал мое ядро ​​к высшей половине:

OUTPUT_FORMAT("elf32-i386","elf32-i386","elf32-i386") 
OUTPUT_ARCH(i386) 

ENTRY(entry) 
SECTIONS 
{ 
    . = 0x00100000; 
    start = .; 
    .text : 
    { 
     *(.text) 
     . = ALIGN(4096); 
    } 

    .data : 
    { 
     *(.data) 
     *(.rodata) 
     . = ALIGN(4096); 
    } 

    .bss : 
    { 
     *(.bss) 
     *(stack_bottom) 
     *(stack_top) 
     . = ALIGN(4096); 
    } 
    end = .; 
    kernel_end = .; 
} 

Я считаю, что проблема заключается в отсутствии пространства между «.text» и толстой кишкой. Я дал мне такие ошибки для другого проекта. Если вы хотите, чтобы указать, где каждая секция должна быть расположена, это сделать так:

.text : AT(ADDR(.text) - 0xC0000000) 
    { 
     *(.text) 
     . = ALIGN(4096); 
    } 
+0

Спасибо! Это решило синтаксическую ошибку, но, как я сказал ранее, она вызывает ошибку несовместимости –

+0

Можете ли вы вставить ошибку? Я еще не видел ошибку несовместимости. – crunch

+0

ошибка была ** Архитектура входного файла 'build/loader.o' i386 несовместима с выходом i386: выход x86-64 **, и мне удалось исправить это, добавив '-melf_i386' в качестве дополнительного параметра в команду компоновщика, теперь я правильно загружаю свое ядро! Большое спасибо. –

0

Try назначать адреса разделам следующим образом:

ENTRY (loader) 
OUTPUT ("kernel.bin") 

SECTIONS 
{ 
     . = 0x100000; 
     .text: 
     ALIGN(0x1000) 
     { 
      *(.text*); 
      *(.rodata*); 
     } 

     .data: 
     ALIGN(0x1000) 
     { 
      *(.data*); 
     } 

     .bss: 
     ALIGN(0x1000) 
     { 
      *(.bss*); 
     } 
} 
Смежные вопросы