0

环境

  • 视窗 10
  • 去 1.13.7
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,这个库确实使用了 C 库drv.go

/*
#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在这个文件中定义了未定义的类型和变量。

这是正常行为,还是我错过了什么?

4

1 回答 1

1

goracle 已移至Godror,不支持交叉编译。在此处阅读相同的问题:https ://github.com/go-goracle/goracle/issues/171

于 2020-03-03T13:30:43.850 回答