簡體   English   中英

如果我導入“C”,則無法交叉編譯

[英]Cannot cross-compile if I import "C"

環境

  • 視窗 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 ,這個庫確實使用了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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM