SWIG + Go:不使用 cgo 时不允许使用 C 源文件

问题描述 投票:0回答:2

我正在尝试使用 SWIG 将这个库(https://github.com/lemire/EWAHBoolArray)包装在 Go 中,但自从升级到 1.4 以来我遇到了很多问题

我已经使用 Go 1.3.3 并按照 SWIG 网站上的 SWIG + Go 说明成功地让一切正常工作。我必须手动编译和安装包,而不是使用 go build,但一切都工作正常。

现在,当我尝试使用 Go 1.4.2 运行相同的程序时,我收到此错误:

ewah_usage.go:5:2: C source files not allowed when not using cgo: goewah_gc.c

我使用最新的 SWIG 和最新的 Go 重建了软件包,它似乎已经正确安装。但是每当我使用该库运行程序时,我都会收到上述错误。

我的测试程序(goewah 是我用 SWIG 构建的库)

package main

import (
    "fmt"
    "bitbucket.org/evanh/goewah"
)

func main() {
    x := goewah.NewEWAHBoolArray()
    x.Set(1)
    x.Set(2)
    fmt.Println(x.Get(1))
}
go build swig
2个回答
17
投票

这是一个错误。对不起。添加一个文件,上面写着

package p
import "C"

你应该绕过它。


0
投票

虽然将 CGO_ENABLED=0 添加到像

go test
这样的命令可以工作,
编辑器仍然始终在 go 文件顶部保留警告。

只需添加到 C/C++ 源文件的顶部,例如:

//go:build ignore

链接:
- https://pkg.go.dev/cmd/go#hdr-Build_constraints
- https://zhuanlan.zhihu.com/p/566878192
- https://github.com/fritx/mixed-playground/blob/main/strings/2129.%20%E5%B0%86%E6%A0%87%E9%A2%98%E9%A6%96 %E5%AD%97%E6%AF%8D%E5%A4%A7%E5%86%99.cc

© www.soinside.com 2019 - 2024. All rights reserved.