You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Makefile出现Missing Parenthesis Stopped Error与Missing Brace Stopped Error的解决方法

解决Makefile执行时的Missing Parenthesis/Brace Stopped Error错误

兄弟,我看你在编译自定义内核的Makefile时碰到了这两个括号相关的错误,先仔细捋一捋问题所在——你的Makefile代码本身语法看起来没啥问题,大概率是链接脚本linker.ld里出了语法错误,因为Makefile执行时调用ld链接器处理linker.ld,这时候如果链接脚本里有未闭合的括号(())或者大括号({}),就会抛出这类错误。

下面是具体的排查和解决步骤:

  • 第一步:重点检查linker.ld的语法
    链接脚本(ld script)对括号/大括号的闭合要求非常严格,比如定义内存段的标准写法是:

    SECTIONS {
      .text 0x100000 : { *(.text) }
      .data : { *(.data) }
      .bss : { *(.bss) }
    }
    

    你要逐行核对:

    • 所有打开的{都有对应的闭合},没有遗漏
    • 所有使用(的地方(比如表达式、符号引用)都有对应的)
    • 有没有不小心输入了中文的括号/大括号(非ASCII字符会被ld识别为无效符号,也会触发类似错误)
  • 第二步:确认Makefile本身的语法细节(虽然你的代码看起来没问题,但还是扫一遍)

    • 确保所有变量引用都是$(变量名)的格式,没有遗漏闭合的)——你的代码里$(GPPPARAMS)、$(ASPARAMS)这些写法都是正确的
    • 检查规则里的命令行缩进:必须用Tab键缩进,不能用空格(不过这个错误通常会提示missing separator,不是括号类错误,但还是确认下更稳妥)
  • 第三步:分步执行命令定位错误
    如果不确定是哪一步出的问题,可以手动执行Makefile里的命令,一步步排查:

    1. 先编译C++文件:g++ -m32 -o kernel.o -c kernel.cpp,看是否报错
    2. 编译汇编文件:as --32 -o loader.o loader.s,看是否报错
    3. 手动执行链接命令:ld -melf_i386 -T linker.ld -o mykernel.bin loader.o kernel.o——如果这一步抛出括号错误,那百分百是linker.ld的问题

如果你的linker.ld确实存在括号/大括号未闭合的问题,补上之后再执行make应该就能解决这两个错误了。

内容的提问来源于stack exchange,提问作者Mehmet1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 16:57:47