“预期的伪寄存器;发现 R13”错误

Posted

技术标签:

【中文标题】“预期的伪寄存器;发现 R13”错误【英文标题】:"expected pseudo-register; found R13" error 【发布时间】:2022-01-24 04:53:09 【问题描述】:

我刚刚用 goland 运行了一个 go 项目,但遇到了错误:

# github.com/choleraehyq/pid
../../../.go/pkg/mod/github.com/choleraehyq/pid@v0.0.10/pid_go1.5_amd64.s:28: expected pseudo-register; found R13
../../../.go/pkg/mod/github.com/choleraehyq/pid@v0.0.10/pid_go1.5_amd64.s:29: expected pseudo-register; found R14
asm: assembly of ../../../.go/pkg/mod/github.com/choleraehyq/pid@v0.0.10/pid_go1.5_amd64.s failed

我对这个错误感到困惑,我不知道该怎么办。我无法通过此错误消息进行一些调试工作,也没有从谷歌获得任何有用的信息。 github.com/choleraehyq/pid 在框架下被引用。

我只想知道发生了什么以及如何解决它。请帮助我,非常感谢。

【问题讨论】:

【参考方案1】:

这也发生在我身上。它可能与您的 golang 版本有关; 我把我的golang版本从1.17改成了1.14,问题解决了。

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。 使用 go 1.16 而不是 1.17 也为我解决了这个问题。【参考方案2】:

我只想知道发生了什么以及如何解决它。


    阅读说明。

Stack Overflow: Help: How to create a Minimal, Reproducible Example

    按照说明进行操作。

例如,

包goidgithub.com/choleraehyq/pid@v0.0.10 以编程方式检索当前 goroutine 的 ID。

.

$ cat pid.go
package main

import (
    "fmt"

    goid "github.com/choleraehyq/pid"
)

func main() 
    pid := goid.GetPid()
    fmt.Println(pid)

$

.

$ cat go.mod
module example/pid

go 1.17

require github.com/choleraehyq/pid v0.0.10
$ 

.

$ go version
go version go1.17.5 linux/amd64
$ 

.

$ go build pid.go && ./pid
# github.com/choleraehyq/pid
../../gopath/pkg/mod/github.com/choleraehyq/pid@v0.0.10/pid_go1.5_amd64.s:28: expected pseudo-register; found R13
../../gopath/pkg/mod/github.com/choleraehyq/pid@v0.0.10/pid_go1.5_amd64.s:29: expected pseudo-register; found R14
asm: assembly of ../../gopath/pkg/mod/github.com/choleraehyq/pid@v0.0.10/pid_go1.5_amd64.s failed
$ 

升级到最新版本。

.

$ go get -u github.com/choleraehyq/pid
go: downloading github.com/choleraehyq/pid v0.0.13
go: upgraded github.com/choleraehyq/pid v0.0.10 => v0.0.13
$

.

$ cat go.mod
module example/pid

go 1.17

require github.com/choleraehyq/pid v0.0.13
$ 

.

$ go build pid.go && ./pid
1
$ 

避免使用旧的、过时的和不受支持的软件版本。



更新:

来自 OP 的评论:

谢谢。原始项目是一个大项目,具有很深的依赖关系。我发现我需要在项目的go.mod 中添加github.com/choleraehyq/pid v0.0.13 // indirect。 – sh1yu

【讨论】:

非常感谢!事实上,原来的项目是一个大项目,并且有很深的依赖关系。首先我不知道如何升级依赖的版本,最后我发现它只需要在项目的go.mod中添加github.com/choleraehyq/pid v0.0.13 // indirect即可。 @rocka2q 您的大部分答案都不是实际答案。如果您删除“课程”并将答案保留为实际答案,那将是最好的。可以在 OP 上的 cmets 中教授课程 @Cjmarkham:Stack Overflow cmets 是暂时的。添加 OP 的评论为未来的读者留下了答案中的最终解决方案。 Stack Overflow 的主要目的是收集有用的、可搜索的问答。 我看不出评论比答案更短暂... @Cjmarkham:OP 询问“知道发生了什么以及如何解决它。”我解释了我是如何发现这个问题的:“授人以鱼,你养他一天;授人以渔,你养他一辈子。” Stack Overflow 是一个学习网站。

以上是关于“预期的伪寄存器;发现 R13”错误的主要内容,如果未能解决你的问题,请参考以下文章

Cordova PushPlugin 寄存器出现错误

EMU 8086 在寄存器中存储错误的数组元素值

ATL COM DLL 寄存器错误 0x80070716

将变量与寄存器一起使用:错误 A2022:指令操作数必须相同大小

错误 C2403 使用内联 x86 C++ 程序集将寄存器内容移动到变量

VHDL 代码错误:“错误 (10818):无法在 <location> 推断 <name> 的寄存器,因为它没有在时钟沿之外保持其值”