2013-10-17 75 views
2

我使用gccgo编译我的项目。这是我的目录布局。我读这Q/A线程How to use custom packages in 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

不确定gcc。但是:你想导入一个本地包,所以你的导入看起来应该像'import'./fib“'不''src/fib”',因为在GOROOT下你真的没有包“src/fib” t似乎使用GOPATH,但我不知道gcc如何处理这个)。 – Volker

回答

1

这组命令适用于我。

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

这将软件包命名为FIBO,所以你必须导入它是这样的main.go

import "fibo" 

现在你可以告诉编译main.go其中fibo.o库

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

然后你需要连接两个文件来创建可执行的主

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