我使用gccgo编译我的项目。这是我的目录布局。我读了这个Q / A帖子How to use custom packages in golang?
所以跟着这个
src/
+-fibo/
| +-fibo.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)
}
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 $
我被困在这里。我尝试了不同的目录结构组合。没人帮忙。我错过了什么?有没有我应该设置的环境变量,即使是这个?
答案 0 :(得分:3)
看起来您可能没有设置GOPATH
Environment Variable
GOPATH环境变量指定工作区的位置。在开发Go代码时,它可能是您需要设置的唯一环境变量。
鉴于您当前的目录结构
src/
+-fibo/
| +-fibo.go
+main.go
如果您的src
目录位于GOPATH
下,那么您应该可以这样做:
import "fibo"
main.go
中的。
另请参阅"GOPATH environment variable"中的The go
command documentation。
答案 1 :(得分: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
然后,您需要链接这两个文件以创建可执行文件
.../go-lang-expts/src $ gccgo -o main main.o fibo/fibo.o