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 程序

更多推荐