请在提交问题之前回答以下问题。谢谢!
您使用的Go版本是什么( go version
)?
go version go1.11 darwin/amd64
这个问题是否在最新版本中重现?
是的。
您正在使用什么操作系统和处理器架构( go env
)?
GOARCH="amd64"
GOBIN="/Users/ntop/tools/go"
GOCACHE="/Users/ntop/Library/Caches/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/ntop/workspace/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/t6/8417qy4n2zn3lb370499nrl00000gn/T/go-build892512347=/tmp/go-build -gno-record-gcc-switches -fno-common"
您做了什么?
我正在为iOS构建一个Go游戏。我使用GoMobile的 x/mobile/app
包来编写游戏,但我没有使用 gomobile build
来构建一个 .app
。因为 gomobile build
只是构建一个简单的iOS应用,如果我想要使用更多的本地功能,那是不可能的。所以我使用 gomobile bind
来构建一个 .framework
,并在XCode的 main
方法中调用“Start”函数。但是它会导致异常 - 'gobind app.Run called on thread xxx, but app.init ran on xx'。在“Start”函数中,我没有使用任何goroutine,只是调用 app.Main()
来启动游戏。我在 init
函数和 app.Main()
函数中都打印了线程ID,线程ID确实不同。似乎用gomobile构建的 .framework
在与调用函数相同的线程中无法初始化包。
您期望看到什么?
使用 .framework
构建的 gomobile bind
可以成功地在我的iOS项目中工作。
PS:只有使用 x/mobile/app
的代码会崩溃,因为检查代码就留在那里。
您看到了什么?
应用程序崩溃并打印上述消息。
3条答案
按热度按时间58wvjzkj1#
@ntop001 我遇到了完全相同的问题,你找到了解决方案吗?
如果是的话,你是如何解决这个问题的?
提前感谢
翻译结果:@ntop001 我遇到了完全相同的问题,你找到了解决方案吗?如果是的话,你是如何解决这个问题的?提前感谢。
z0qdvdin2#
@meslienjonathan 我只是在主函数中注解掉了一些代码,你可以在这里看到我的修改:KorokEngine/mobile@3b142cd
我还修复了gomobile中的一些其他错误:https://github.com/KorokEngine/mobile/tree/korok
pxq42qpu3#
@ntop001 很棒,它能正常工作,谢谢你!