当前位置: 首页 > 滚动 > 内容页

【天天播资讯】go 1.20后关于 go tool compile汇编代码引入包找不到的问题处理

来源:哔哩哔哩 2023-05-10 00:59:05

今天准备跟大家讲解关于interface的 带方法的非空接口 和 不带方法的空接口;

看一下汇编代码中的深层数据结构;

回家执行:


【资料图】

go tool compile -S interface2.go

发现虚拟机中命令行报错:

我就很纳闷儿,我在公司是没问题的,因此我google找一些大佬看下问题;

的问题;

知道了编译过程中fmt这个包会编译成一个静态库文件.a

这样我就专门写了一个引用 fmt包的go文件进行go build 查看其编译过程;

go build -x -v -a myA.go 2>&1 | more > br.txt

将myA.go文件进行编译查看其编译过程,导入到br.txt文件中

package mainimport "fmt"func main() {    fmt.Println(1)}

找到文件中编译过程中的fmt包编译过程:

/usr/local/go/pkg/tool/linux_amd64/compile -o $WORK/b002/_pkg_.a -trimpath "$WORK/b002=>" -p fmt -std -complete -buildid S7VmaYzQ3wdSCzOFapTF/S7VmaYzQ3wdSCzOFapTF -goversion go1.20.3 -nolocalimports -importcfg $WORK/b002/importcfg -pack /usr/local/go/src/fmt/doc.go /usr/local/go/src/fmt/errors.go /usr/local/go/src/fmt/format.go /usr/local/go/src/fmt/print.go /usr/local/go/src/fmt/scan.go

将其改成我自己手动执行的:

/usr/local/go/pkg/tool/linux_amd64/compile -o pkg.a -p fmt -std -complete -buildid S7VmaYzQ3wdSCzOFapTF/S7VmaYzQ3wdSCzOFapTF -goversion go1.20.3 -nolocalimports -pack /usr/local/go/src/fmt/doc.go /usr/local/go/src/fmt/errors.go /usr/local/go/src/fmt/format.go /usr/local/go/src/fmt/print.go /usr/local/go/src/fmt/scan.go

发现不行报错:

发现包还会引用更多的包,因此直接找编译生成好的.a文件直接用;

找到了这一行:

直接到:

/root/.cache/go-build/b7/

这个路径下找,还真找到了这个文件;

将这个文件拷贝到,我们需要汇编的文件夹:

创建 fmt包替换文件:

importcfg.txt 内容:

packagefile fmt=fmt.a

之后直接进行汇编:

go tool compile -p twzz -importcfg importcfg.txt interface2.go

生成了.o的汇编文件;我们就可以通过指令查看我们需要的汇编代码了:

go tool objdump -S -s "^twzz.p3e$" interface2.o

我们如果需要自己的汇编代码:

go tool compile -p foo -o foo.a -importcfg importcfg.txt foo.go

网址:

Go1.20编译静态库过程记录

https://blog.csdn.net/baixvkwfn/article/details/128942195

golang中生成静态库(.a文件)并操作静态库

https://blog.csdn.net/huha666/article/details/121305696

关键词:
x 广告
x 广告