Как локальный импорт в нелокальном пакете ошибка - PullRequest
4 голосов
/ 07 марта 2019

Я пытаюсь сгенерировать файл .aar в Windows 7 64bit с помощью команды 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" (что-то с ". \", Которое было связано с относительными путями), поэтому я понятия не имею, почему это происходит. Может кто-нибудь помочь? Если мне нужно предоставить больше данных, просто скажите мне, и я предоставлю их.

Заранее спасибо!

EDIT: Я попытался изменить «пакет случайный» на «пакет вещь», а последняя часть ошибки изменила «случайный» на «вещь»:

..\\[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, и это выдает ту же ошибку, что и выше. Любая помощь с этим? (Если мне нужно предоставить больше информации, скажите мне) Я не могу понять, что вызывает это, поскольку единственные примеры, которые я видел в Интернете, были связаны с относительным импортом в файл. Есть ли у меня 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:

Я попытался выполнить эту команду с файлом ps3-proxy.go (файл, который я хочу преобразовать) внутри папки GOPATH / src /, и он выдал другую ошибку:

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'

Я не знаю, что это значит, потому что я даже не могу найти что-то об этой конкретной ошибке с clang.exe в Google, поэтому я не знаю, «решил» ли я главную проблему, но создал другую, или если Я не должен был помещать файл туда, и затем я возвращаюсь к основной проблеме (даже если я сделал это правильно, у меня есть другая проблема, с которой я тоже ничего не могу найти ...).

РЕДАКТИРОВАТЬ 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 голосов
/ 09 марта 2019

Таким образом, я наконец понял, в чем проблема с 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 \ [папку], чтобы они работали ине выдавайте мне нелокальную ошибку (кстати, в моем случае GOPATH - это C: \ Users \ [User Name] \ go, на случай, если это будет полезно знать) ... Обе программы (одна изGitHub и другие с веб-сайта с учебным пособием) должны быть помещены в путь, подобный этому, для преобразования и не могут быть преобразованы вне его.Это странно.Я не знаю, должно ли это быть так, но, по крайней мере, оно работает ...

Надеюсь, это поможет кому-то другому с этой проблемой!

...