2017-09-07 119 views
2

我正在嘗試使用go來創建一個跨平臺的本機庫,並找到了gomobile的this教程。但是,當我嘗試初始化它時(即使我給出Android NDK路徑,雖然我沒有在下面的示例中),但似乎失敗了,因爲它找不到stdlib.hgomobile init無法找到stdlib.h

我試着圍繞cgo做一些調查,但沒有發現任何東西跳到我身上,希望對生態系統更熟悉的人可以指點我正確的方向。

$ gomobile init 
gomobile: go install -gcflags=-shared -ldflags=-shared -pkgdir=/Users/myusername/go/pkg/gomobile/pkg_android_arm std failed: exit status 2 
# runtime/cgo 
_cgo_export.c:2:10: fatal error: 'stdlib.h' file not found 

我的環境......(我在OS X埃爾卡皮坦新鮮安裝go1.9達爾文/ AMD64)的

$ go env 
GOARCH="amd64" 
GOBIN="" 
GOEXE="" 
GOHOSTARCH="amd64" 
GOHOSTOS="darwin" 
GOOS="darwin" 
GOPATH="/Users/myusername/go" 
GORACE="" 
GOROOT="/usr/local/go" 
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64" 
GCCGO="gccgo" 
CC="clang" 
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/rx/l7pzlrld2mqczrfb36t536hh0000gp/T/go-build735124167=/tmp/go-build -gno-record-gcc-switches -fno-common" 
CXX="clang++" 
CGO_ENABLED="1" 
CGO_CFLAGS="-g -O2" 
CGO_CPPFLAGS="" 
CGO_CXXFLAGS="-g -O2" 
CGO_FFLAGS="-g -O2" 
CGO_LDFLAGS="-g -O2" 
PKG_CONFIG="pkg-config" 

編輯:(添加初始化失敗的詳細輸出)

 
$ gomobile init -v 

# Installing golang.org/x/mobile/gl. 

# Installing golang.org/x/mobile/app. 

# Installing golang.org/x/mobile/exp/app/debug. 

# Installing std for android/arm. 
runtime/internal/sys 
runtime/internal/atomic 
runtime 
sync/atomic 
unicode 
internal/race 
errors 
unicode/utf8 
math 
math/bits 
container/list 
container/ring 
crypto/subtle 
crypto/internal/cipherhw 
internal/nettrace 
runtime/cgo 
vendor/golang_org/x/crypto/poly1305 
sync 
encoding 
unicode/utf16 
image/color 
internal/cpu 
internal/syscall/windows 
internal/syscall/windows/registry 
image/color/palette 
internal/syscall/windows/sysdll 
io 
syscall 
internal/singleflight 
runtime/race 
# runtime/cgo 
_cgo_export.c:2:10: fatal error: 'stdlib.h' file not found 
vendor/golang_org/x/text/secure 
vendor/golang_org/x/text/unicode 
bytes 
strings 
hash 
crypto/cipher 
runtime/trace 
hash/crc32 
hash/adler32 
crypto/hmac 
hash/crc64 
hash/fnv 
vendor/golang_org/x/text/transform 
text/tabwriter 
bufio 
path 
html 
strconv 
math/rand 
math/cmplx 
time 
internal/syscall/unix 
reflect 
crypto/aes 
crypto 
crypto/rc4 
encoding/base64 
encoding/base32 
encoding/ascii85 
crypto/sha512 
crypto/md5 
crypto/sha1 
crypto/sha256 
image 
internal/poll 
image/internal/imageutil 
image/draw 
image/jpeg 
os 
os/signal 
fmt 
sort 
encoding/binary 
path/filepath 
compress/bzip2 
encoding/pem 
container/heap 
regexp/syntax 
runtime/debug 
crypto/des 
vendor/golang_org/x/crypto/chacha20poly1305/internal/chacha20 
vendor/golang_org/x/crypto/curve25519 
vendor/golang_org/x/crypto/chacha20poly1305 
io/ioutil 
compress/flate 
context 
archive/tar 
math/big 
compress/lzw 
encoding/hex 
debug/dwarf 
debug/gosym 
debug/plan9obj 
database/sql/driver 
encoding/csv 
encoding/gob 
encoding/json 
database/sql 
encoding/xml 
archive/zip 
compress/gzip 
compress/zlib 
debug/macho 
debug/elf 
debug/pe 
log 
vendor/golang_org/x/net/http2/hpack 
vendor/golang_org/x/text/unicode/bidi 
vendor/golang_org/x/text/unicode/norm 
net/url 
mime 
mime/quotedprintable 
net/http/internal 
flag 
crypto/dsa 
crypto/elliptic 
encoding/asn1 
crypto/rand 
go/token 
go/scanner 
crypto/rsa 
vendor/golang_org/x/text/secure/bidirule 
regexp 
text/template/parse 
go/ast 
go/constant 
os/exec 
text/scanner 
crypto/ecdsa 
crypto/x509/pkix 
image/gif 
image/png 
vendor/golang_org/x/net/idna 
index/suffixarray 
testing 
internal/trace 
runtime/pprof 
text/template 
net/internal/socktest 
os/user 
runtime/pprof/internal/profile 
testing/iotest 
testing/quick 
go/parser 
go/printer 
testing/internal/testdeps 
internal/testenv 
go/doc 
html/template 
go/types 
go/format 
go/build 
go/internal/gccgoimporter 
go/internal/gcimporter 
go/internal/srcimporter 
go/importer 
gomobile: go install -gcflags=-shared -ldflags=-shared -pkgdir=/Users/myusername/go/pkg/gomobile/pkg_android_arm -v std failed: exit status 2 
+0

您是否安裝了xcode命令行工具? – JimB

+0

是的,並重置他們的路徑(沒有改變路徑,必須已經使用默認值),如果有他們的配置問題,它必須是超越... – jm0

+0

混淆的一種...如果我運行'go install -gcflags = -shared -ldflags = -shared -pkgdir =/Users/myusername/go/pkg/gomobile/pkg_android_arm std',它會成功,當gomobile嘗試運行它時,它不工作? (這意味着初始化對我來說仍然是壞的...) – jm0

回答

0

問題依然重現了go1.10 darwin/amd64即使issue21802修補。

如果go install -gcflags=-shared -ldflags=-shared -pkgdir=/Users/myusername/go/pkg/gomobile/pkg_android_arm std可以獨立運行,它會成功,假設問題是運行時ENV問題,則有一種解決方法。

訣竅來解決這個問題:

1.Run go install -gcflags=-shared -ldflags=-shared -pkgdir=/Users/myusername/go/pkg/gomobile/pkg_android_arm std手動。 確保已成功安裝

2.然後在init.go內保持沉默installStd

go/src/golang.org/x/mobile/cmd/gomobile/init.go (around Line 165-175) 
// Install standard libraries for cross compilers. 
start := time.Now() 
//if ndkRoot != "" { 
    // Ideally this would be -buildmode=c-shared. 
    // https://golang.org/issue/13234. 
    // androidArgs := []string{"-gcflags=-shared", "-ldflags=-shared"} 
    // for _, arch := range archs { 
     // env := androidEnv[arch] 
     // if err := installStd(env, androidArgs...); err != nil { 
      // return err 
     // } 
    // } 
//} 

3.安裝的解決方法再次gomobile:go install golang.org/x/mobile/cmd/gomobile

4.Run gomobile init一次。

相關問題