go - 如何在非本地包中本地导入错误

标签 go gomobile

我正在尝试使用gomobile bind --target=android命令在Windows 7 64bits中生成一个.aar文件,它给我标题错误。我一直在寻找,但找不到答案。我正在尝试使用该程序在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”(与“。\”有关的东西与相对路径有关),所以我不知道为什么会这样。有人可以帮忙吗?如果我需要提供更多数据,请告诉我,我会提供。

提前致谢!

编辑:
我试图将“随机包装”更改为“包装物”,并且错误的最后一部分将“随机”更改为“东西”:
..\\[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指向何处。我知道这是一行和一列,但是我不知道去哪里查找错误,因为我什至试图Go 生成的文件,但找不到。当我复制创建的文件夹时,它仅附带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

最佳答案

因此,我终于了解了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 软件版本,不适用于从其网站下载的版本。这很奇怪,但至少终于奏效了。
现在,我只是不明白为什么我必须将所有要转换的文件放入GOPATH\src\[a文件夹]中,以便它们起作用,并且不给我非本地错误(在我的情况下为btw ,我的GOPATH是C:\Users\[用户名]\go,以备不时之需)...两个程序(一个来自GitHub,另一个来自带有教程的网站)必须放在一个像这样的路径,无法在其外部进行转换。那真是怪了。我不知道它是否应该是这样,但至少可以正常工作... [编辑:这是因为我没有阅读有关如何执行go程序的文档...不再发生,因为现在我正在使用正确的命令执行。 ]
希望这可以帮助其他有此问题的人!

关于go - 如何在非本地包中本地导入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55049699/

相关文章:

json - 如何处理文档中json字段不一致的情况

go - 如何创建 golang 网络套接字聊天?

gomobile 命令错误 "No android NDK path is set "

go - 使用 gomobile 访问地理位置数据

android - 包中没有导出的名称 "src/github.com/rohankeskar19/android_whisper"

android - 如何使用gomobile发布输出非调试apk?

go - 如何在GoLang中删除“#gosetup”行?

go - 以编程方式编译go源文件

go - 如何在 go-lang 中获取矩阵的维数?

Gomobile 包中没有导出名称