Nic*_*oso 7 android makefile cmake android-ndk wireguard
我正在尝试在我的 Windows 机器上构建wireguard-android源代码,通过反复试验逐步解决问题。
我安装了 CMake 和 Make,我遇到的第一个问题是uname(mingw64)报告的“错误”值,与Google 托管的 golang文件名不匹配。
我已经编辑(破解)make 文件以指向 Windows 版本 (amd64) 的真实文件名。问题是 windows 版本有一个.zip扩展名而不是.tar.gzzip 的结果似乎与管道命令不兼容。
原始命令:
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 会导致错误:
解压:无法找到或打开 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 或 C:\wireguard-android\app\build\intermediates\cmake\debug\obj \armeabi-v7a/../generated-src/go-1.13.7/.ZIP。
% Total % Received % Xferd 平均速度 时间 时间 当前下载 上传 花费的总剩余速度
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) 写入正文失败 (34 != 1357)
make: *** [C:\wireguard-android\app\build\intermediates\cmake\debug\obj\armeabi-v7a/../generated-src/go-1.13.7/.prepared] 错误 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 平均速度 时间 时间 当前下载 上传 花费的总剩余速度
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0gzip: stdin 有多个条目--rest 被忽略 tar: 孩子死于信号13 tar:错误不可恢复:现在退出
0 127M 0 108k 0 0 248k 0 0:08:47 --:--:-- 0:08:47 248k
curl: (23) 写入正文失败 (738 != 1357)
制作:*** [C:\wireguard-android\app\build\intermediates\cmake\debug\obj\armeabi-v7a/../generated-src/go-1.13.7/.prepared] 错误 2
我已经设法解决了这个问题,我正在回答我自己的问题而不是删除,因为我认为这最终会帮助其他开发人员。
首先澄清一些:
tar命令。
jar命令,但是这在 cmake/make 中并没有成功..路径中间,因此我必须修改 CMakeLists 文件以使用绝对路径Makefile 的更改结尾:(来自 .prepared/mkdir 语句之后)
# Warning the (lack-of) indentation here is critical /sf/answers/313842721/
# 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上
| 归档时间: | 
 | 
| 查看次数: | 410 次 | 
| 最近记录: |