环境
GOOS=windows
GOARCH=amd64
CGO_ENABLED=1问题所在
在尝试交叉编译我的项目几天之后,我发现如果我的一个文件确实导入了"C",那么go build似乎就跳过了它。
这是我的第一个文件first.go
package main
import "C"
type myFirstType struct {
str string
}
func main() {
v := myFirstType{str: "Hello"}
printFirstTypeWithParam(v)
}这是第二个second.go
package main
import (
"fmt"
)
func printFirstTypeWithParam(v myFirstType) {
fmt.Println(v.str)
}当我运行go build时,一切都是正确的。但是,当我运行env GOOS=linux go build时,下面是输出:
# test-package
.\second.go:7:32: undefined: myFirstType一旦我移除import "C"行,所有这些都完美地工作了。
为什么这是个问题?
在实际项目中,我使用gopkg.in/goracle.v2,,而这个库在drv.go中确实使用C库
/*
#cgo CFLAGS: -I./odpi/include -I./odpi/src -I./odpi/embed
#include <stdlib.h>
#include "dpi.c"
*/
import "C"当我在我的项目(env GOOS=linux go build)上运行相同的build命令时,下面是输出:
# myproject/vendor/gopkg.in/goracle.v2
vendor\gopkg.in\goracle.v2\drv_10.go:22:2: undefined: ConnectionParams
vendor\gopkg.in\goracle.v2\drv_10.go:23:2: undefined: drv未定义的类型和变量都在此drv.go文件中定义。
这是正常的行为,还是我遗漏了什么?
发布于 2020-03-03 13:30:43
goracle被转移到戈德罗,不支持交叉编译。在这里阅读同样的问题:https://github.com/go-goracle/goracle/issues/171
https://stackoverflow.com/questions/60503108
复制相似问题