是否可以让 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代码中使用Go运行时特性的方法是可行的。我了解到
isarchive
可以用 Go 汇编来修改。我在打电话之前就这样做了runtime.rt0_go
。
要更改的 Go 程序集
isarchive
看起来像这样:
MOVD $0, R0
MOVB R0, runtime·isarchive(SB)