我正在制作一个使用 PKCS11 的 CGO 代码,在启用 CGO 和一些错误、测试和更正之后,我发现了一个我从未见过的新错误。无论我使用“go build”还是“go run main.go”,错误仍然出现。 有谁知道如何解决吗?
package main
import (
"fmt"
"github.com/miekg/pkcs11"
)
func main() {
p := pkcs11.New("aetpkss1.dll")
err := p.Initialize()
if err != nil {
panic(err)
}
defer p.Destroy()
defer p.Finalize()
slots, err := p.GetSlotList(true)
if err != nil {
panic(err)
}
session, err := p.OpenSession(slots[0], pkcs11.CKF_SERIAL_SESSION|pkcs11.CKF_RW_SESSION)
if err != nil {
panic(err)
}
defer p.CloseSession(session)
err = p.Login(session, pkcs11.CKU_USER, "1234")
if err != nil {
panic(err)
}
defer p.Logout(session)
p.DigestInit(session, []*pkcs11.Mechanism{pkcs11.NewMechanism(pkcs11.CKM_SHA_1, nil)})
hash, err := p.Digest(session, []byte("this is a string"))
if err != nil {
panic(err)
}
for _, d := range hash {
fmt.Printf("%x", d)
}
fmt.Println()
}
C:\Users\user\Desktop\Teste2> go run main.go
# runtime/cgo
cc1.exe: error: C:\src\github.com\miekg\pkcs11\pkcs11.h: not a directory [-Werror]
cc1.exe: all warnings being treated as errors
您需要安装软件包pkcs11,您可以使用此命令
go get -u github.com/miekg/pkcs11
并且您的系统上需要有 aetpkss1.dll PKCS#11 库。并且它位于正确的位置并正确安装。
检查环境变量CGO_ENABLED和CC是否设置正确。您可能需要设置这些变量来指定要使用和启用 CGO 的 C 编译器。例如:
export CGO_ENABLED=1
export CC=gcc