3

我正在尝试使用该命令在 Windows 7 64 位中生成一个 .aar 文件,gomobile bind --target=android它给了我标题错误。我一直在寻找,我找不到这个问题的答案。我正在尝试使用该程序在 Android Studio 中制作一个应用程序,它的第一部分如下:

package main (I changed it to "random" for the bind command to work - that's the thing to do, right?)

import (
    "github.com/elazarl/goproxy"
    "text/template"
    "net/http"
    "regexp"
    "bytes"
    "log"
    "net"
)

错误如下:

gomobile: go build -buildmode=c-shared -o=C:\Users\\[User name]\AppData\Local\Temp\gomobile-work-101707703\android\src\main\jniLibs\armeabi-v7a\libgojni.so gobind failed: exit status 1
..\\[User name]\AppData\Local\Temp\gomobile-work-101707703\src\gobind\go_randommain.go:17:2: local import "." in non-local package

我正在遵循的指南之一是https://dzone.com/articles/gomobile-library-development-for-iosandroid,我正在做大部分事情。我从来没有听说过这种语言,所以我是一个初学者(如果这是一个愚蠢的问题,我很抱歉)。

根据我阅读的内容,这可能是因为程序中有例如“.\greetings”(与“.\”有关的东西与相对路径有关),所以我不知道为什么会这样. 有人可以帮忙吗?如果我需要提供更多数据,请告诉我,我会提供。

提前致谢!

编辑:我尝试将“package random”更改为“package thing”,错误的最后一部分将“random”更改为“thing”:

..\\[User name]\AppData\Local\Temp\gomobile-work-101707703\src\gobind\go_thingmain.go:17:2: local import "." in non-local package

我不应该尝试转换这个程序,因为它是以无法转换的方式编写的吗?或者是其他东西?

如果它有任何帮助,我在 Windows 中的用户名有一个空格,尽管在 CMD 中它显示为未完成的名称和 ~1,所以它至少在命令返回时没有空格。我不明白那些 17:2 的东西指向哪里。我知道它是一行和一列,但我不知道去哪里寻找错误,因为我什至试图转到生成的文件但我找不到它。当我复制创建的文件夹时,它只有 4 或 5 个文件,没有文件夹,所以我看不到该文件中的错误来理解这一点......希望有人知道答案或可能的答案。

编辑 2:现在我决定尝试在导入后删除所有代码,并且只在 .go 文件中显示代码中显示的内容,它给出了以下错误:

gomobile: C:\Users\[User name]\go\bin\gobind.exe -lang=go,java -outdir=C:\Users\[User name\AppData\Local\Temp\gomobile-work-847973191 . failed: exit status 1
no exported names in the package "."
no exported names in the package "."
no exported names in the package "."
no exported names in the package "."

而且我没有任何“。” 在文件中,所以我可能会认为“。” 指的是一些包,但我不知道,因为只有 4 个而不是 7 个被导入。刚才我删除了文件中的所有内容,除了第一行说它package random给出了与上面相同的错误。有什么帮助吗?(如果我需要提供更多信息,请告诉我)我不明白是什么原因造成的,因为我在 Internet 上看到的唯一示例与文件中的相对导入有关。我的 GOPATH 有错吗?我有它的默认值%USERNAME%/go。这是一个可执行文件。我试图通过将包更改为随机将其转换为库。我不知道它是否与此有关,或者即使我需要更改其他任何内容以将其用作库。

编辑3(太多,但我试图提供尽可能多的信息):

我试图逐个删除代码,直到第一个错误变为其他错误,程序中唯一剩下的代码是:

package thing

func ExternalIP()

使用此代码,它仍然会给出第一个错误。如果我尝试删除第一行,则会出现期待包的错误。但是,如果我尝试更改该函数的名称,甚至将 E 更改为 e,则会出现第三个错误。我不知道该函数名称有什么特殊之处,但我在整台计算机上的任何文件中都找不到“ExternalIP”名称,所以我不知道这与非本地导入有什么关系像那样。如果有帮助,我试图放入 Android Studio 的程序如下:https ://github.com/mondul/PS3-Proxy/blob/master/ps3-proxy.go (这不是我的,我打算如果我能理解如何将其转换为 .aar 文件然后在 Android Studio 上使用它,请给这样做的人很多功劳)。

编辑4:

我尝试使用 GOPATH/src/folder 中的文件 ps3-proxy.go(我要转换的文件)运行该命令,但它给出了不同的错误:

gomobile: go build -buildmode=c-shared -o=C:\Users\[User Name]\AppData\Local\Temp\gomobile-work-722000459\android\src\main\jniLibs\armeabi-v7a\libgojni.so gobind failed: exit status 2
# runtime/cgo
clang.exe: error: unknown argument: '-fno-addrsig'

我不知道这意味着什么,因为我什至无法在 Google 上使用 clang.exe 找到有关此特定错误的信息,所以我不知道我是否“解决”了主要问题但又创建了另一个问题,或者我是否应该没有把文件放在那里,然后我回到主要问题(即使我做对了,我还有其他问题,我也找不到任何关于它的问题......)。

编辑 5(很酷,只有 5 个……):

我尝试了另一个代码并在其他测试中做同样的事情,我得到了与原始程序相同的错误,所以它可能与程序无关......太棒了,现在我完全不知道该怎么做。代码如下,以防万一它可能有用:

package random

import (
    "math/rand"
    "time"
)

func SudoRandomNumer() int {
    return rand.Intn(time.Now().Second())
}

这是一个错误吗?我想我按原样安装了所有东西(好吧,或者可能没有,或者这可能不会发生)。我已经尝试卸载并再次安装大约 3 次。它仍然不起作用。我从一个网站上获取的代码,其中包含如何做我想做的事情的示例:http: //www.codingvelocity.com/2015/08/08/go-bind-intro.html

4

1 回答 1

0

所以我终于明白了 EDIT 4 的问题是什么(而且我认为这是正确的做法,至少在我的情况下)......因为它可能与任何程序无关,并且它说的错误可能必须做clang.exe,我去找它,发现它在ndk-bundle文件夹中。那个文件夹是我从官网下载的,重命名后放到我的Android SDK Tools文件夹中使用。我不知道为什么我没有从 Android Studio 下载它,但我没有。因此,在知道该文件位于我从外部下载的文件夹中而不是从 Android Studio 内部之后,我删除了所有内容并重新下载了 NDK Bundle,但这次是从 Android Studio(为了以防万一可能有用,我下载了所有其他内容)当我们点击显示过时的包时显示),它终于奏效了!然后为了确保问题是我从 Android Studio 外部下载了它,我再次使用了下载的版本,它给出了相同的 clang.exe 错误。之后,再次尝试使用从 Android Studio 下载的版本,它又可以工作了。所以这可能是一个错误或类似的东西,因为至少对我来说,它只适用于 Android Studio NDK Bundle 版本,而不适用于从他们的网站下载的版本。这很奇怪,但至少它终于奏效了。因为至少对我来说它只适用于 Android Studio NDK Bundle 版本,而不适用于从他们的网站下载的版本。这很奇怪,但至少它终于奏效了。因为至少对我来说它只适用于 Android Studio NDK Bundle 版本,而不适用于从他们的网站下载的版本。这很奇怪,但至少它终于奏效了。

现在我只是不明白为什么我必须将所有要转换的文件放在 GOPATH\src\[a folder] 中以便它们工作并且不给我非本地事物错误(顺便说一句,在我的情况下,我的 GOPATH 是 C:\Users\[User Name]\go,以防万一知道)... 两个程序(一个来自 GitHub,另一个来自带有教程的网站)都必须放在一个像这样的路径要转换并且不能在它之外进行转换。这很奇怪。我不知道它是否应该是那样的,但至少它正在工作...... [编辑:这是因为我没有阅读关于如何执行 go 程序的文档......不再发生,因为现在我'正在使用正确的命令执行。]

希望这可以帮助其他遇到此问题的人!

于 2019-03-09T15:32:20.493 回答