Stringer工具抱怨错误的归档标题

时间:2015-04-22 14:04:38

标签: go

我正在尝试使用go generate / stringer(golang.org/x/tools/cmd/stringer)在枚举上生成String()方法。我有些问题,我认为是因为不同系统上的.a软件包格式略有不同。我有这个文件:

package main

import (
    "math/rand"
)

//go:generate stringer -type=Foo
type Foo int;

const (
    FooPrime Foo = iota
    FooBis
)

func main() {
    //Just use rand anywhere, otherwise we get a compiler error
    rand.Seed(1)
}

现在,如果我在我的机器上运行go generate example.go,一切都很好:创建了foo_string.go。但是,在测试机上,我得到了:

stringer: checking package: example.go:4:2: could not import math/rand (reading export data: /usr/lib64/go/pkg/linux_amd64/math/rand.a: go archive is missing __.PKGDEF)

现在,在对代码进行一些挖掘后,我认为我得到了这个错误,因为在我的机器上rand.a有以下标题:

!<arch>
__.PKGDEF       0           0     0     644     2051   

` 在测试机器上它有以下标题:

!<arch>
__.PKGDEF/      0           399   399   100644  2051  

`

我认为关键的区别是PKGDEFF之后的斜线。 gcimporter拒绝处理.a文件,如果它没有__。PKGDEF标题。

为了检查这一点,我手动编辑了gcimporter / exportdata.go并更改了其中一行:

if name != "__.PKGDEF"

到此:

if name != "__.PKGDEF" && name != "__.PKGDEF\"

在此更改(以及编译和安装所有内容)之后,我能够在example.go上运行go generate。

我的问题是:为什么我会遇到这个问题,如何摆脱它(除了手动编辑外部库)?

0 个答案:

没有答案