2013-10-17 77 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