登录
首页 >  Golang >  Go问答

无法进行跨平台编译,如果导入"C"

来源:stackoverflow

时间:2024-03-01 14:45:25 415浏览 收藏

目前golang学习网上已经有很多关于Golang的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《无法进行跨平台编译,如果导入"C"》,也希望能帮助到大家,如果阅读完后真的对你学习Golang有帮助,欢迎动动手指,评论留言并分享~

问题内容

环境

  • windows 10
  • go 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 

#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

以上就是《无法进行跨平台编译,如果导入"C"》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>