我已经设置了一个最小的代码库 repo 来复制错误并尽可能清楚地解释这个错误:https : //github.com/soroushjp/go_wrapper_c_err


我目前正在使用封装C secp256k1 库的 Go 包go-secp256k1进行 ECDSA 签名的项目。


如果我通过导入直接使用 go-secp256k1 中的函数(如 main.go 中所示),它工作正常。所以在 repo 中,运行 main.go 效果很好,并且打印出一个公钥。


所以这是一个奇怪的错误:如果我尝试使用 go-secp256k1 为包编写测试,我会收到一个奇怪的错误。要复制,请运行:


go test github.com/soroushjp/go_wrapper_c_err/cryptoutil -v

我收到的错误:


=== RUN TestNewPublicKey

SIGTRAP: trace trap

PC=0x4031730

signal arrived during cgo execution


goroutine 20 [syscall]:

runtime.cgocall(0x40013d0, 0x436ddd0)

    /usr/local/go/src/pkg/runtime/cgocall.c:143 +0xe5 fp=0x436ddb8 sp=0x436dd70

github.com/toxeus/go-secp256k1._Cfunc_secp256k1_start(0x404c14d)

    github.com/toxeus/go-secp256k1/_obj/_cgo_defun.c:99 +0x31 fp=0x436ddd0 sp=0x436ddb8

github.com/toxeus/go-secp256k1.Start()

    /Users/soroushjp/Desktop/Dropbox/Development/go/src/github.com/toxeus/go-secp256k1/secp256k1.go:9 +0x1a fp=0x436ddd8 sp=0x436ddd0

github.com/soroushjp/go_wrapper_c_err/cryptoutil.NewPublicKey(0xc20800e080, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0)

    /Users/soroushjp/go/src/github.com/soroushjp/go_wrapper_c_err/cryptoutil/cryptoutil.go:35 +0xbd fp=0x436de98 sp=0x436ddd8

github.com/soroushjp/go_wrapper_c_err/cryptoutil.TestNewPublicKey(0xc20804c090)

    /Users/soroushjp/go/src/github.com/soroushjp/go_wrapper_c_err/cryptoutil/cryptoutil_test.go:10 +0x5f fp=0x436df68 sp=0x436de98

testing.tRunner(0xc20804c090, 0x420e110)

    /usr/local/go/src/pkg/testing/testing.go:422 +0x8b fp=0x436df98 sp=0x436df68

runtime.goexit()

    /usr/local/go/src/pkg/runtime/proc.c:1445 fp=0x436dfa0 sp=0x436df98

created by testing.RunTests

    /usr/local/go/src/pkg/testing/testing.go:504 +0x8db


我的测试代码非常少,几乎与 main.go 中的代码相同:


package cryptoutil


import (

    "fmt"

    "testing"

)


func TestNewPublicKey(t *testing.T) {

    privateKey := NewPrivateKey()

    publicKey, err := NewPublicKey(privateKey)

    if err != nil {

        t.Error(err)

    }

    fmt.Println(publicKey)

}

知道这里发生了什么吗?“go test”和“go run”之间发生了什么不同,导致 ECDSA 包装器遇到此错误?