如何本地导入非本地包错误

时间:2019-03-07 17:28:09

标签: 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指向何处。我知道这是一行和一列,但是我不知道去哪里查找错误,因为我什至试图转到生成的文件,但找不到。当我复制创建的文件夹时,它只附带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

1 个答案:

答案 0 :(得分:0)

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

现在,我只是不明白为什么我必须将所有要转换的文件放入GOPATH \ src \ [a文件夹]中,以使其正常工作,而不会给我非本地错误(btw,就我而言,我的GOPATH为C:\ Users \ [用户名] \ go,以防万一。)...这两个程序(一个来自GitHub,另一个来自带有教程的网站)放在要转换的路径中,并且不能在其外部进行转换。那真是怪了。我不知道是否应该是这样,但是至少它正在起作用...

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