2

我使用 gccgo 来编译我的项目。这是我的目录布局。我读了这个 Q/A 线程如何在 golang 中使用自定义包?

所以跟着这个

src/  
 +-fibo/  
 |   +-fibo.go  
 +main.go  

这是代码清单

main.go

package main

import (
    "os"
    "fmt"
    "strconv"
    "src/fibo"
)

func main(){

    if len(os.Args) < 2 {
        fmt.Printf("ur input sucks\n")
    }
    num,_ := strconv.Atoi(os.Args[1])
    fibo.Fibo(num)
}

fibo/fibo.go

package fibo

import  "fmt" 

func Fibo(num int) {

    var a,b int
    for i :=0; i< num; i++ {
        a, b = b, a+b
        fmt.Print(a, " ")
    }
    fmt.Print("\n")
}

但是当我尝试编译时,我遵循了通常的 gcc 程序。分别编译文件并将它们链接在一起成为最终的可执行文件。我收到这个错误

.../go-lang-expts/src $ gccgo -c -ofibo/fibo.o fibo/fibo.go 
.../go-lang-expts/src $ gccgo -c -omain.o main.go 

   main.go:7:10: error: import file ‘src/fibo’ not found 
   main.go:18:2: error: reference to undefined name ‘fibo’

.../go-lang-expts/src $ 

我被困在这里。我尝试了不同的目录结构组合。没有帮助。我错过了什么?有没有我应该设置的环境变量,即使是这个?

4

2 回答 2

3

看起来你可能没有设置GOPATH环境变量

如何编写 Go 代码

GOPATH 环境变量指定工作区的位置。它可能是您在开发 Go 代码时需要设置的唯一环境变量。

鉴于您当前的目录结构

src/  
 +-fibo/  
 |   +-fibo.go  
 +main.go

如果您的src目录在下面,GOPATH那么您应该可以执行以下操作:

import "fibo"

main.go.

另请参阅命令文档中的GOPATH 环境变量”go

于 2013-10-19T12:35:31.513 回答
1

这组命令对我有用。

.../go-lang-expts/src $ gccgo -c -fgo-pkgpath=fibo -ofibo/fibo.o fibo/fibo.go

这将命名包 fibo,因此您必须在 main.go 中将其导入

import "fibo"

现在你可以通过告诉 fibo.o 库在哪里来编译 main.go

.../go-lang-expts/src $ gccgo -c main.go -Ifibo

然后你需要链接这两个文件来创建一个可执行的 main

.../go-lang-expts/src $ gccgo -o main main.o fibo/fibo.o
于 2017-06-27T17:04:57.907 回答