使用带有 -buildmode=c-archive 的 Go 运行时

问题描述 投票:0回答:1

是否可以让 Go 代码通过此构建模式使用 Go 运行时?

-buildmode=c-archive

我正在将 Go 代码构建为静态库,并将其与从本机汇编代码编译的 .o 文件链接。该项目在汇编代码中启动并调用 Go 代码。然后Go代码开始在

runtime.rt0_go
中执行,开始初始化运行时的过程。

proc.go
文件中的 runtime.main 末尾附近,代码在运行
main.main
之前退出 Go 运行时。由于
isarchive
为真,我们只需从
runtime.main
返回。

    if isarchive || islibrary {
        return
    }

    fn := main_main
    fn() 

所以,我想知道在编译为存档文件时是否可以使用 Go 运行时功能。如果是的话,我想我可能使用了错误的方法来实现我的目标。

go assembly static-linking
1个回答
0
投票

这种在Go代码中使用Go运行时特性的方法是可行的。我了解到

isarchive
可以用 Go 汇编来修改。我在打电话之前就这样做了
runtime.rt0_go

要更改的 Go 程序集

isarchive
看起来像这样:

MOVD    $0,     R0
MOVB    R0,     runtime·isarchive(SB)
© www.soinside.com 2019 - 2024. All rights reserved.