Окружающая среда
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 / g oracle .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
определены и неопределенный тип, и переменная.
Это нормальное поведение, или я что-то упустил?