首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果导入"C“,则无法交叉编译。

如果导入"C“,则无法交叉编译。
EN

Stack Overflow用户
提问于 2020-03-03 08:37:09
回答 1查看 409关注 0票数 0

环境

  • Windows 10
  • 去1.13.7
代码语言:javascript
复制
GOOS=windows
GOARCH=amd64
CGO_ENABLED=1

问题所在

在尝试交叉编译我的项目几天之后,我发现如果我的一个文件确实导入了"C",那么go build似乎就跳过了它。

这是我的第一个文件first.go

代码语言:javascript
复制
package main

import "C"

type myFirstType struct {
    str string
}

func main() {
    v := myFirstType{str: "Hello"}
    printFirstTypeWithParam(v)
}

这是第二个second.go

代码语言:javascript
复制
package main

import (
    "fmt"
)

func printFirstTypeWithParam(v myFirstType) {
    fmt.Println(v.str)
}

当我运行go build时,一切都是正确的。但是,当我运行env GOOS=linux go build时,下面是输出:

代码语言:javascript
复制
# test-package
.\second.go:7:32: undefined: myFirstType

一旦我移除import "C"行,所有这些都完美地工作了。

为什么这是个问题?

在实际项目中,我使用gopkg.in/goracle.v2,,而这个库在drv.go中确实使用C库

代码语言:javascript
复制
/*
#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命令时,下面是输出:

代码语言:javascript
复制
# 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文件中定义。

这是正常的行为,还是我遗漏了什么?

EN

回答 1

Stack Overflow用户

发布于 2020-03-03 13:30:43

goracle被转移到戈德罗,不支持交叉编译。在这里阅读同样的问题:https://github.com/go-goracle/goracle/issues/171

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60503108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档