2016-09-01 139 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

你可以试着在'.text'后面删除'addr'吗? – 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

尝试地址分配给部分是这样的:

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

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

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

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