frpc编译,macos上编译,用于越狱后ios使用(编译linux版本、android版本)
frpc编译,macos上编译,用于越狱后ios使用
编译ios版本
原文链接: [FEATURE REQUEST] can frpc be built and run on jailbreak iOS devices? #614
I tried compiling it on a modern Mac (Ventura, M1 silicon) and finally got it to work.
I had to change:
GOOS from darwin -> ios
GOARCH from arm -> arm64
I tested it on the same iPhoneSE and it works
$CC=$GOROOT/misc/ios/clangwrap.sh env CGO_ENABLED=1 GOOS=ios GOARCH=arm64 go build -ldflags "-s -w" -o ./frpc_darwin ./cmd/frpc
$file frpc_darwin
frpc_darwin: Mach-O 64-bit executable arm64
On iPhone:
(I renamed it to frpc_darwin_arm64)
FrakPhoneSE:/frak root# ./frpc_darwin_arm64
Killed: 9
FrakPhoneSE:/frak root# ldid -S f ./frpc_darwin_arm64
./minimal/mapping.h(54): _assert(false); errno=2
FrakPhoneSE:/frak root# chmod a+x ./frpc_darwin_arm64
FrakPhoneSE:/frak root# ./frpc_darwin_arm64
2022/09/24 15:06:53 [I] [service.go:357] [535e47879ad12c32] login to server success, get run id [535e47879ad12c32], server udp port [0]
2022/09/24 15:06:53 [I] [proxy_manager.go:142] [535e47879ad12c32] proxy added: [frak_ssh]
2022/09/24 15:06:53 [I] [control.go:177] [535e47879ad12c32] [frak_ssh] start proxy success
^C
Go environment setup on Mac for reference:
brew install golang
# put this in ~/.bashrc:
export GOPATH="$HOME/go"
export GOROOT="$(brew --prefix golang)/libexec"
export PATH="$PATH:${GOPATH}/bin:${GOROOT}/bin"
$go version
go version go1.19.1 darwin/arm64
编译linux版本
env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o ./frpc_linux_amd64 ./cmd/frpc
编译android版本
env CGO_ENABLED=0 GOOS=android GOARCH=arm64 go build -trimpath -ldflags "-s -w" -o ./release/frpc_android_arm64 ./cmd/frpc
命令解读
env
这个命令用于设置环境变量。在这个例子中,我们用它来设置CGO_ENABLED的值为0,以禁用CGO库。
CGO_ENABLED=0
CGO是Go语言提供的一种机制,用于在程序中调用C代码。但是,在交叉编译时,由于不同平台的C库的差异性,会导致CGO编译失败。因此,通过将CGO_ENABLED的值设置为0,我们可以禁用CGO,避免这种问题的发生。
GOOS=android
GOOS是一个环境变量,用于指定目标操作系统的名称。在这个例子中,我们将其设置为android,表示要编译出一个适用于Android系统的可执行文件。
GOARCH=arm64
GOARCH是一个环境变量,用于指定目标CPU架构的类型。在这个例子中,我们将其设置为arm64,表示要编译出一个基于ARM64架构的可执行文件。
go build
这个命令用于编译Go语言程序。在这个例子中,我们将用它来编译frpc的安卓版本。
-trimpath
这个选项用于削减可执行文件中的路径信息。由于路径信息可能包含机器的敏感信息,因此我们可以使用这个选项来删除它们,提高二进制文件的安全性。
-ldflags “-s -w”
这个选项用于在编译时设置链接器的参数。其中,-s选项表示省略符号表和调试信息,-w选项表示省略DWARF调试信息。这两个选项可以有效地减小二进制文件的大小。
-o ./release/frpc_android_arm64
这个选项用于指定编译输出的文件名和路径。在这个例子中,我们将编译结果保存到 ./release/frpc_android_arm64 文件中。
./cmd/frpc
这个参数用于指定要编译的Go语言程序的相对路径。在这个例子中,我们将编译 cmd 目录下的 frpc 程序
更多推荐


所有评论(0)