3

I want to run a go file, main package imported a local package which imported a github package. and get an error (missing .a file)

ENV: $GOROOT=/usr/local/go $GOPATH=/gopath

go version 1.6.3 (same problem in 1.6.2)

I tried to run a go file like this:

/gopath/src/myproj/main/app.go

package main

import (
  "../http/server"
)

func main() {
  server.Run()
}

/gopath/src/myproj/http/server/route.go

package server

import (
    "github.com/gorilla/mux"
    "net/http"
)

func Run(){
    router := mux.NewRouter()
    router.HandleFunc("/", handler)
    http.Handle("/", router)
    http.ListenAndServe("9090", nil)
}

func handler(res http.ResponseWriter, req *http.Request) {
    res.Write([]byte("Hello"))
}

then,I run go get github.com/gorilla/mux and I can see there are files

/gopath/pkg/linux_amd64/github.com/gorilla/mux (there are context.a and mux.a)
/gopath/src/github.com/gorilla/mux
/gopath/src/github.com/gorilla/context

Yes, src file and pkg file(.a) has downloaded form github,

BUT , I run "go run main/app.go" , get

# command-line-arguments
/usr/local/go/pkg/tool/linux_amd64/link: cannot open file /usr/local/go/pkg/linux_amd64/github.com/gorilla/mux.a: open /usr/local/go/pkg/linux_amd64/github.com/gorilla/mux.a: no such file or directory

compiler does not find file in GOPATH, but GOROOT if I copy $GOPATH/pkg files to $GOROOT/pkg was good.

And, if I import github.com/gorilla/mux in main package directly was fine too.

user219031
  • 39
  • 2
  • 2
    Don't use relative paths for imports, and use `go install` or `go build`. http://stackoverflow.com/questions/28153203/golang-undefined-function-declared-in-another-file/28153553#28153553 – JimB Jul 19 '16 at 10:48

1 Answers1

0

As JimB said don't use relative paths for imports

if you change "../http/server" to myproj/http/server it shouldn't have the linking problems anymore

mechinn
  • 46
  • 3