2017-01-16 54 views
0

我有兩個項目,一個是圖書館,另一個是實用程序。我用go install來建立圖書館並將其放在pkg區域。這似乎按預期工作。去找不到本地包

sbio $ pwd 
     /home/mjohn/workspaces/goprojects/src/crown/sbio 
sbio $ CC=armv7l-timesys-linux-gnueabi-gcc CGO_ENABLED=1 GOOS=linux GOARCH=arm GOARM=7 go install 
sbio $ ls ../../../pkg/linux_arm/crown 
     sbio.a 

我的問題是當我試圖讓我的實用程序使用這個庫。它抱怨no buildable Go source files,但它的目錄下src目錄,這讓我覺得它不在pkg區域看到它。我在該實用程序中的導入路徑是crown/sbio。任何想法都會有所幫助。

utility $ GOOS=linux GOARCH=arm GOARM=7 go build 
     go build crown/sbio: no buildable Go source files in /home/mjohn/workspaces/goprojects/src/crown/sbio 

utility $ GOOS=linux GOARCH=arm GOARM=7 go build -v -x -work 
     WORK=/tmp/go-build709862068 
     crown/sbio 
     github.com/jessevdk/go-flags 
     mkdir -p $WORK/github.com/jessevdk/go-flags/_obj/ 
     os/signal 
     mkdir -p $WORK/github.com/jessevdk/ 
     cd /home/mjohn/workspaces/goprojects/src/github.com/jessevdk/go-flags 
     /home/mjohn/software/go/pkg/tool/linux_386/compile -o $WORK/github.com/jessevdk/go-flags.a -trimpath $WORK -p github.com/jessevdk/go-flags -complete -buildid 2e7b82d3996437f712d51c2be269e6cd3eb809d6 -D _/home/mjohn/workspaces/goprojects/src/github.com/jessevdk/go-flags -I $WORK -pack ./arg.go ./closest.go ./command.go ./command_private.go ./completion.go ./convert.go ./error.go ./flags.go ./group.go ./group_private.go ./help.go ./ini.go ./ini_private.go ./man.go ./multitag.go ./option.go ./option_private.go ./optstyle_other.go ./parser.go ./parser_private.go ./termsize.go ./termsize_linux.go 
     mkdir -p $WORK/os/signal/_obj/ 
     mkdir -p $WORK/os/ 
     cd /home/mjohn/software/go/src/os/signal 
     /home/mjohn/software/go/pkg/tool/linux_386/compile -o $WORK/os/signal.a -trimpath $WORK -p os/signal -buildid 36d5db084a1ab49c3fbb474d340be7996d6606d8 -D _/home/mjohn/software/go/src/os/signal -I $WORK -pack -asmhdr $WORK/os/signal/_obj/go_asm.h ./doc.go ./signal.go ./signal_unix.go 
     mkdir -p $WORK/crown/sbio/_obj/ 
     mkdir -p $WORK/crown/ 
     go build crown/sbio: no buildable Go source files in /home/mjohn/workspaces/goprojects/src/crown/sbio 
     /home/mjohn/software/go/pkg/tool/linux_386/asm -o $WORK/os/signal/_obj/sig.o -trimpath $WORK -I $WORK/os/signal/_obj/ -I /home/mjohn/software/go/pkg/include -D GOOS_linux -D GOARCH_arm ./sig.s 
     pack r $WORK/os/signal.a $WORK/os/signal/_obj/sig.o # internal 

utility $ go env 
     GOARCH="386" 
     GOBIN="" 
     GOEXE="" 
     GOHOSTARCH="386" 
     GOHOSTOS="linux" 
     GOOS="linux" 
     GOPATH="/home/mjohn/workspaces/goprojects" 
     GORACE="" 
     GOROOT="/home/mjohn/software/go" 
     GOTOOLDIR="/home/mjohn/software/go/pkg/tool/linux_386" 
     CC="gcc" 
     GOGCCFLAGS="-fPIC -m32 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build583017880=/tmp/go-build -gno-record-gcc-switches" 
     CXX="g++" 
     CGO_ENABLED="1" 

utility $ go version 
     go version go1.7.4 linux/386 

感謝您的任何幫助。

+0

是不是'go install'把二進制文件放在'bin /'中?你如何打電話給工具中的庫? – Nevermore

+1

我在library上使用'go install',這會在'pkg'下進行。如果我使用'go install'來構建實用程序,該實用程序具有main(),並且會在'bin'下進行,但對於使用'go build'的實用程序。 – dangeroushobo

回答

0

我能夠通過構建實用程序並定義了CCCGO_ENABLED變量來解決我的問題。我需要將它們定義爲構建實用程序,即使它沒有包含任何由於庫而需要的cgo代碼。

如果可以在不需要這樣做的情況下構建實用程序,我仍然會感興趣,因爲讓圖書館的每個用戶都需要定義這些是件很痛苦的事情。