关于termux安装ddns-go内存溢出(segmentation fault),bad sysem call等问题解决(重新编译)

这里是引用
引用:文心一言,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

图片

bad system call
segmentation fault


原因分析

作者编译的版本与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步)
 报错请往下看

你的报错是否类似这样↓?

make build wrong photo

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

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值