x/mobile/app: gobind崩溃 'app.Run在线程xxx上被调用,但app.init在xx上被运行'

hgb9j2n6  于 4个月前  发布在  Go
关注(0)|答案(3)|浏览(52)

请在提交问题之前回答以下问题。谢谢!

您使用的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 的代码会崩溃,因为检查代码就留在那里。

您看到了什么?

应用程序崩溃并打印上述消息。

58wvjzkj

58wvjzkj1#

@ntop001 我遇到了完全相同的问题,你找到了解决方案吗?
如果是的话,你是如何解决这个问题的?
提前感谢

翻译结果:@ntop001 我遇到了完全相同的问题,你找到了解决方案吗?如果是的话,你是如何解决这个问题的?提前感谢。

z0qdvdin

z0qdvdin2#

@meslienjonathan 我只是在主函数中注解掉了一些代码,你可以在这里看到我的修改:KorokEngine/mobile@3b142cd
我还修复了gomobile中的一些其他错误:https://github.com/KorokEngine/mobile/tree/korok

pxq42qpu

pxq42qpu3#

@ntop001 很棒,它能正常工作,谢谢你!

相关问题