这篇文章上次修改于 246 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
目前stackplz的一个需求是,针对arm进程能够正常解析syscall参数
不同于一般情况下go程序的跨平台构建,这里并不是要编译arm架构的stackplz,而是能将数据解析为arm架构下的结构体
也就是说目的是编译两个arm64版本,但是一个是用于解析arm64的系统调用参数,一个是arm的
最开始准备用两个分支来实现,但是这样做还是太不优雅了,于是决定采用build tags来做编译
具体来说是下面这样:
user/argtype/argtype_complex.go 这个文件中用到了Arg_Utsname这个结构体
user/argtype/config_struct_arm.go 这个文件使用了build tags
,具体代码片段如下
//go:build armtarget
// +build armtarget
package argtype
type Arg_Utsname struct {
Index uint8
Len uint64
util.Utsname
}
user/argtype/config_struct_arm64.go 这个文件使用了build tags
,具体代码片段如下
//go:build !armtarget
// +build !armtarget
package argtype
type Arg_Utsname struct {
Index uint8
Len uint32
util.Utsname
}
但是编译的时候却提示说找不到Arg_Utsname
这个定义,经过一通测试和分析,发现可能是这样的
Makefile中设置了GOARCH=arm64,但是设置-tags armtarget
的时候,本来config_struct_arm.go
应该生效,但是与GOARCH
这个对不上,所以就被排除了
所以解决方法就是把config_struct_arm.go
改个名字
也就是说build tags应该避免用arm等架构的名称,文件名自然也要避免
没有评论