环境
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
)上运行相同的构建命令时,输出如下:# 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
文件中定义。这是正常的行为,还是我缺少了什么?
最佳答案
goracle已移至godror,并且不支持交叉编译。在此处阅读相同的问题:https://github.com/go-goracle/goracle/issues/171
关于linux - 如果导入“C”,则无法交叉编译,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60503108/