【问题标题】:Undefined symbol in MIPSMIPS 中的未定义符号
【发布时间】:2021-07-10 09:28:17
【问题描述】:

我在尝试运行我的代码后收到以下消息:

The following symbols are undefined:
printf

这是我的代码的一部分:

main__loser:

    .asciiz "You lose!"

(...)
main__body:
    
    jal     whole_grid
    nop

    jal     direction
    nop

    sw      $v0,24($fp)
    lw      $a0,24($fp)
    jal     update_snake
    nop

    bne     $v0,$zero,main__body
    nop

    la      $v0,length
    lw      $v1,0($v0)
    li      $v0,3                        # 0x3
    bne     $v0,$zero,main__epilogue
    div     $zero,$v1,$v0
    break   7
    mfhi    $v0
    mflo    $v0
    sw      $v0,28($fp)
    lw      $a1,28($fp)
    la      $a0, main__loser
    jal     printf
    nop

    move    $v0,$zero

main__epilogue: 
(...)

有人知道我没有定义符号printf这个错误是什么意思吗?

【问题讨论】:

  • SPIM 不附带 libc,在这种情况下,您只需将固定字符串传递给 printf。相反,使用 SPIM 的 print-string 系统调用;这是使用 SPIM(和 MARS)的预期方式。 courses.missouristate.edu/KenVollmar/MARS/Help/SyscallHelp.html
  • 另外,在将常量 3 加载到 $v0 之后,bne $v0,$zero 似乎毫无意义;该分支将始终被占用,因此您的jal printf 将永远无法到达。

标签: assembly mips spim


【解决方案1】:

有人知道我没有定义符号printf这个错误是什么意思吗?

一个典型的程序由多个文件组成。

您在以下代码行中调用的函数printf

jal printf

...在另一个汇编程序(或 C)源文件中定义。

通常,此类函数在包含预编译汇编程序和 C 代码的“库”文件中定义。

错误:

您编译了您的程序,但没有将此“库”文件添加到您的项目中。

如果你不能使用库文件(例如你没有适合你的 CPU 或操作系统的库文件),你不能使用printf,但你必须将消息直接写入操作系统(甚至到硬件)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    相关资源
    最近更新 更多