这里是引用
引用:文心一言,github ddns-go仓库
不是小白想直接看解决方法请看省流
:
编译ddns-go:下载修补版Makefile(密码1234)放入下载的源码包内,修改第三行0.0.0为下载版本号并去掉文件名的后缀,拷贝到termux私有目录
,执行make build
,运行./ddns-go
希望对小白有帮助 正文下方
事先说明:
- 如果你连不上github,请自备魔法或镜像站
- 如果你不会从github上下载release,请上b站找教程
- 更多参数请查看ddns-go仓库
- 以下关于路径的都使用绝对路径
- 如果
你的手机
内没有
可以使用的好用的
文本编辑器,解压缩工具等,建议你下载MT管理器,操作自行百度 - 如果你连成品可执行文件都运行不了,请先将文件拷贝至termux私有目录(/data/data/com.termux/files/home/),再执行
cp 文件目录/ddns-go ./ddns-go
#拷贝文件到本目录
chmod a+x ./ddns-go
#授予运行权限
./ddns-go
项目场景&问题描述
项目场景:Android
手机上的termux
应用 想要运行ddns-go
运行ddns-go
linux(或freebsd)_arm64
4.x.x及以上版本
时出现内存溢出(segmentation fault)
,bad system call
等
图片
原因分析 :
作者编译的版本与
termux
不兼容
解决方案
自己编译
适合termux
的版本十
1. 下载源码
前往项目release挑选心仪
的版本,展开Assets
,向下翻找找到Source code (zip)
,下载下来 标准的浏览器会下载到手机的 /sdcard/download/
。
2.解压拷贝
在/sdcard/download/
下找到带有ddns-go xxx
字样的压缩包 (如果里面只有ddns-go的可执行文件就是你下载错了),将压缩包解压
到某个文件夹
。建议手机上操作省去传文件的步骤
进入termux
应用 ,运行
cd ~ #回到初始目录
cp -r 你解压到的文件夹地址 ./ddns-go_make #复制文件
cd ./ddns-go_make #进入目录
ls #查看文件夹名
cd 上一步查看的文件夹名 #进入目录
第二条命令运行如果报错,请运行
termux-setup-storage
命令开启储存权限
3.配置环境
执行以下命令
pkg install golang -y #因为是go语言所以安装go
make build #尝试第一次编译
不出意外
的话第条命令会有很多错误
(如果一个报错没有那么恭喜你,可直接跳到第6步)
报错请往下看
你的报错是否类似这样↓?
4.逐条解析(不想看请跳到第5步)
PS:
不建议
在此处对Makefile
文件做修改,
建议等到第5步
再做修改。
和Makefile
脱不了干系,Makefile
用于指导程序编译,Makefile
与termux不兼容,所以会有错误。
1.找不到which命令
试试在终端执行Makefile
文件中关于GO的定义:shell which go
,会提示找不命令,这是因为termux内没有shell这个命令。将shell
去掉就可以。
2,3.git
工具错误
在Makefile中关于git的命令 VERSION=$(shell git describe --tags
git rev-list --tags --max-count=1\
2>/dev/null || git rev-parse --short HEAD)
是用来查看ddns-go
版本的。但是这个文件不是使用git clone
命令克隆下来的,所以没有.git
文件夹及其文件,所以git
无法获取到版本信息。将Makefile
文件中VERSION
的定义手动改成VERSION="v1.1.1"
的格式就行了。1.1.1
改为自己下载ddns-go
版本。
4.build
命令未找到
这是因为在Makefile
文件中build命令内出现了错误。一般是GO的定义出现错误,获取不到GO的真实路径。直接将GO的的定义改成以下两行就行
WHERE_GO=`command -v go`
GO=$(GO_ENV) $(WHERE_GO)
第一行命令
是获取go
命令的地址,第二行是定义GO。ps:命令建议用``
扩起而不是$()
5.修改Makefile
两种方法任选一种,如果你对
linux
不熟练建议使用第二种
ps:Makefile文件没有后缀名
方法一
在编译文件夹目录下运行以下命令
pkg install vim -y #确保你安装了vim
vim ./Makefile #编辑Makefile文件
以下会清空并覆盖Makefile文件
按下ESC
键,再依次按下g g d G
,清空文件。
复制
以下内容,做修改
(修改处为第三行VERSION
,将0.0.0
修改为你下载的ddns-go的版本
,注意
不要把前面的v
和左右的引号"
删了)
如果你复制下来的有
格式问题或报错
(前提是进行正确
的修改而不是直接粘贴) 或者CSDN
需要登录再复制,请在这里(密码1234) 下载Makefile.txt
文件并复制内容做修改
.PHONY: build clean test test-race
VERSION="v0.0.0"
BUILD_TIME=`date -u +"%Y-%m-%dT%H:%M:%SZ"`
BIN=ddns-go
DIR_SRC=.
DOCKER_ENV=DOCKER_BUILDKIT=1
DOCKER=$(DOCKER_ENV) docker
GO_ENV=CGO_ENABLED=0
GO_FLAGS=-ldflags="-X main.version=$(VERSION) -X 'main.buildTime=$(BUILD_TIME)' -extldflags -static -s -w" -trimpath
WHERE_GO=`command -v go`
GO=$(GO_ENV) $(WHERE_GO)
GOROOT=$(`command -v go` env GOROOT)
GOPATH=$(`command -v go` env GOPATH)
build: $(DIR_SRC)/main.go
@$(GO) build $(GO_FLAGS) -v -o $(BIN) $(DIR_SRC)
build_docker_image:
@$(DOCKER) build -f ./Dockerfile -t ddns-go:$(VERSION) .
test:
@$(GO) test ./..
test-race:
@$(GO) test -race ./...
# clean all build result
clean:
@$(GO) clean ./...
@rm -f $(BIN)
@rm -rf ./dist/*
方法二
在合适
的图形化文本编辑器
内复制以上
内容,并做修改
(修改处为第三行VERSION
,将0.0.0
修改为你下载的ddns-go的版本
,注意
不要把前面的v
和左右的引号"
删了)
如果你复制下来的有
格式问题或报错
(前提是进行正确
的修改而不是直接粘贴) 或者CSDN
需要登录再复制,请在这里(密码1234) 下载Makefile.txt
文件并复制内容做修改
然后(重要
)
将文件名保存并命名为Makefile
,注意没有后缀名
(如果有.txt之类的后缀名请删掉)
复制Makefile
文件的完整路径
在编译文件夹下运行以下命令
cp 刚才复制的完整路径(包括文件名) ./Makefile
没有问题的话就应该没有问题了
6.再次编译
在编译文件夹下运行
make build
等上一会,没有报错
会自动在目录下生成一个ddns-go
可执行文件,使用ls
命令查看
没有报错并成功生成文件的请跳转第7步
报错 go: RLock go.mod: function not implemented
安卓内部存储不让你使用文件锁
,请返回第2步
将文件夹移动到termux私有目录
报错找不到go命令
两种可能 一
,你没有安装golang,请返回第3步
安装golang
二
,Makefile
文件中GO的定义出现错误,请返回第5步重新编辑并复制Makefile
文件
更多请看第4步
7.运行ddns-go
在目录下执行
chmod a+x ./ddns-go #授予运行权限
./ddns-go
正常会有提示和端口信息,不正常请访问ddns-go issues寻求解决办法
关于笔者使用的主题
笔者使用的是zsh下的oh my zsh
,安装了powerlevel10
主题
csdn编辑器打入美元符号变量还会报错。。。
作于 手机端 Kiwi Browser
作者csdn:ms dfh shx,请标明原地址
关键词:termux android golang ddns-go 报错 编译 make build
24/02/11 02:44 am