gpt4 book ai didi

android - 如何让 Wireguard-Android make 文件在 Windows 上运行?

转载 作者:行者123 更新时间:2023-12-02 03:22:35 44 4
gpt4 key购买 nike

我正在尝试构建 wireguard-android我的Windows机器上的源代码,通过反复试验逐步解决问题。

我安装了 CMake 和 Make,我遇到的第一个问题是 uname (mingw64) 报告的“错误”值,与 golang filenames 不匹配。由 Google 托管。

我已经编辑(破解)了 make 文件,使其指向 Windows 版本 (amd64) 的真实文件名。问题是 Windows 版本具有 .zip 扩展名,而不是 .tar.gz,并且 zip 的结果似乎与管道命令不兼容。

原始命令:

curl "https://dl.google.com/go/go$(DESIRED_GO_VERSION).$(shell uname -s | tr '[:upper:]' '[:lower:]')-$(NDK_GO_ARCH_MAP_$(shell uname -m)).tar.gz" | tar -C "$(dir $@)" --strip-components=1 -xzf -

我尝试的更改:(使用 if-else 因为它仍然需要在 mac 上运行)

ifeq "msys" "$(shell uname -o | tr '[:upper:]' '[:lower:]')"
# Note: when enclosed in the ifeq, the ARCH_MAP part no longer worked
# Note: using tar with the zip fails, because we cant untar a zip (signal 13)
# Note: using unzip with the zip fails with confusing paths
curl "https://dl.google.com/go/go$(DESIRED_GO_VERSION).windows-amd64.zip" | unzip -C "$(dir $@)" --strip-components=1 -xzf -
else
curl "https://dl.google.com/go/go$(DESIRED_GO_VERSION).$(shell uname -s | tr '[:upper:]' '[:lower:]')-$(NDK_GO_ARCH_MAP_$(shell uname -m)).tar.gz" | tar -C "$(dir $@)" --strip-components=1 -xzf -
endif

使用解压缩时出现错误:

unzip: cannot find or open C:\wireguard-android\app\build\intermediates\cmake\debug\obj\armeabi-v7a/../generated-src/go-1.13.7/, C:\wireguard-android\app\build\intermediates\cmake\debug\obj\armeabi-v7a/../generated-src/go-1.13.7/.zip or C:\wireguard-android\app\build\intermediates\cmake\debug\obj\armeabi-v7a/../generated-src/go-1.13.7/.ZIP.

% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed

0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 127M 0 5419 0 0 26694 0 1:23:47 --:--:-- 1:23:47 26694

curl: (23) Failed writing body (34 != 1357)

make: *** [C:\wireguard-android\app\build\intermediates\cmake\debug\obj\armeabi-v7a/../generated-src/go-1.13.7/.prepared] Error 9

使用 tar 时会出现错误:

curl "https://dl.google.com/go/go1.13.7.windows-amd64.zip" | tar -C "C:\wireguard-android\app\build\intermediates\cmake\debug\obj\armeabi-v7a/../generated-src/go-1.13.7/" --strip-components=1 -xzf -

% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed

0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0gzip: stdin has more than one entry--rest ignored tar: Child died with signal 13 tar: Error is not recoverable: exiting now

0 127M 0 108k 0 0 248k 0 0:08:47 --:--:-- 0:08:47 248k

curl: (23) Failed writing body (738 != 1357)

make: *** [C:\wireguard-android\app\build\intermediates\cmake\debug\obj\armeabi-v7a/../generated-src/go-1.13.7/.prepared] Error 2

<小时/>
  • 我应该如何让这个命令工作? (使用 tar 或 zip/unzip)
  • 有人向我指出,也许我需要 Android 发行版,而不是 Windows 发行版。在这种情况下,我会假设我需要 armeabi-v7a,但我只能看到 ARMv6 和 ARMv8 软件包。我应该使用什么发行版?

最佳答案

我已经设法解决了这个问题,我正在回答我自己的问题而不是删除,因为我认为这最终会帮助其他开发人员。

首先进行一些澄清:

  • 看起来您应该包含目标平台 Go 库(即 Android 的 ARM),但如果您尝试这样做,您将收到错误消息,指出该文件在构建时不可执行。 (因此构建平台是要匹配的版本,即此处的Windows)
  • 由于 Google 以 Zip 形式提供 Windows 库(相对于其他平台的 tar.gz),因此您无法使用 tar 命令。
    • 由于无法从curl 流中读取zip 文件(索引位于文件末尾),因此您需要下载该文件,然后解压缩。有些人建议使用 jar 命令,但是这在 cmake/make 中并不能成功工作
    • zip 文件将被提取到您选择的路径内的子目录“go”中。因此您需要修改路径
  • Windows 上的某些命令不接受 .. 作为路径中间,因此我必须修改 CMakeLists 文件以使用绝对路径

Makefile 的更改结尾:(来自 .prepared/mkdir 语句之后)

# Warning the (lack-of) indentation here is critical https://stackoverflow.com/a/4483467/984830
# Note: I've hardcoded the windows filename below, so you'll need to do an `if` (like in my question) if you want to support other platforms as well

curl -o "$(BUILDDIR)/go-$(DESIRED_GO_VERSION)/gofile.zip" "https://dl.google.com/go/go$(DESIRED_GO_VERSION).windows-amd64.zip"
unzip -o "$(BUILDDIR)/go-$(DESIRED_GO_VERSION)/gofile.zip" -d "$(dir $@)"
rm -f "$(BUILDDIR)/go-$(DESIRED_GO_VERSION)/gofile.zip"

patch -p1 -f -N -r- -d "$(dir $@)go/" < goruntime-boottime-over-monotonic.diff
touch "$@"

$(DESTDIR)/libwg-go.so: export PATH := $(BUILDDIR)/go-$(DESIRED_GO_VERSION)/go/bin/:$(PATH)
$(DESTDIR)/libwg-go.so: $(BUILDDIR)/go-$(DESIRED_GO_VERSION)/.prepared go.mod
go build -tags linux -ldflags="-X golang.zx2c4.com/wireguard/ipc.socketDirectory=/data/data/$(ANDROID_PACKAGE_NAME)/cache/wireguard" -v -trimpath -o "$@" -buildmode c-shared

CMakeLists 文件的更改结尾:(替换 add_custom_target 部分)

# added a new variable to get the parent dir without using .. in the path
get_filename_component(destdirparent "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/.." ABSOLUTE)

# referred to the variable on the last line of this statment
add_custom_target(libwg-go.so WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/libwg-go" COMMENT "Building wireguard-go" VERBATIM COMMAND make
ANDROID_ARCH_NAME=${ANDROID_ARCH_NAME}
ANDROID_C_COMPILER=${ANDROID_C_COMPILER}
ANDROID_TOOLCHAIN_ROOT=${ANDROID_TOOLCHAIN_ROOT}
ANDROID_LLVM_TRIPLE=${ANDROID_LLVM_TRIPLE}
ANDROID_SYSROOT=${ANDROID_SYSROOT}
ANDROID_PACKAGE_NAME=${ANDROID_PACKAGE_NAME}
CFLAGS=${CMAKE_C_FLAGS}\ -Wno-unused-command-line-argument
LDFLAGS=${CMAKE_SHARED_LINKER_FLAGS}\ -fuse-ld=gold
DESTDIR=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
BUILDDIR=${destdirparent}/generated-src
)

作为引用,原始文件位于:Makefile & CMakeLists并镜像于 Github

关于android - 如何让 Wireguard-Android make 文件在 Windows 上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60154011/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com