惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 三生石上(FineUI控件)
雷峰网
雷峰网
爱范儿
爱范儿
P
Proofpoint News Feed
Security Archives - TechRepublic
Security Archives - TechRepublic
Latest news
Latest news
The Hacker News
The Hacker News
Cyberwarzone
Cyberwarzone
博客园 - 【当耐特】
Project Zero
Project Zero
小众软件
小众软件
T
Tailwind CSS Blog
量子位
博客园 - 聂微东
I
Intezer
美团技术团队
S
SegmentFault 最新的问题
T
Tor Project blog
Spread Privacy
Spread Privacy
V
Vulnerabilities – Threatpost
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Jina AI
Jina AI
罗磊的独立博客
B
Blog RSS Feed
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
T
Troy Hunt's Blog
有赞技术团队
有赞技术团队
Google DeepMind News
Google DeepMind News
宝玉的分享
宝玉的分享
C
Cisco Blogs
L
LINUX DO - 热门话题
Last Week in AI
Last Week in AI
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
AI
AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Microsoft Azure Blog
Microsoft Azure Blog
L
LINUX DO - 最新话题
Know Your Adversary
Know Your Adversary
GbyAI
GbyAI
Engineering at Meta
Engineering at Meta
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Recent Commits to openclaw:main
Recent Commits to openclaw:main
L
Lohrmann on Cybersecurity
The Register - Security
The Register - Security
L
LangChain Blog
博客园 - 叶小钗
T
Tenable Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC

轶哥博客

blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog
blog
2023-03-13 · via 轶哥博客

frp是一个高性能的反向代理工具,它可以帮助我们穿透NAT和防火墙,实现内网穿透。它采用客户端-服务器模式,在内网中部署客户端程序,将需要访问的端口映射到公网上的服务器上,即可通过公网地址访问内网服务。同时,frp还可以作为正向代理使用,从而实现某些特定场景下的代理功能。frpc是frp的客户端程序。

在本文中,我们本文将详细介绍如何编译开源项目frpc的安卓版本。在禁用CGO的情况下,编译一个适用于Android操作系统、基于ARM64架构的可执行文件,同时使用 -trimpath-ldflags "-s -w" 选项来减小二进制文件的大小,并在安卓设备上运行它,以实现在嵌入式设备(自助终端设备)上使用frpc的功能。

环境搭建

在开始编译之前,需要先确保环境已经正确搭建。具体来说,需要满足以下条件:

如果还没有完成以上步骤,请先完成相关配置后再继续进行后续操作。

克隆frpc

首先,我们需要从GitHub上克隆frp项目:

git clone https://github.com/fatedier/frp.git
cd frp

编译frpc

接下来,我们只需要执行下述命令即可编译frpc。编译完成后,我们可以在./release目录下找到生成的frpc_android_arm64可执行文件。

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

在安卓设备上运行frpc

将生成的frpc_android_arm64文件复制到安卓设备上,并赋予执行权限:

adb push ./release/frpc_android_arm64 /data/local/tmp/frpc
adb shell chmod +x /data/local/tmp/frpc

然后,在安卓设备上启动frpc:

adb shell /data/local/tmp/frpc -c /sdcard/frpc.ini

注意,我们需要提供一个配置文件frpc.ini,该文件包含了frpc所需要的配置项。具体的配置项可以参考frp的官方文档。

总结

本文介绍了如何使用 go build 命令编译开源项目frpc的安卓版本。通过该命令,我们可以指定目标操作系统和CPU架构,并禁用CGO以避免交叉编译时的问题。同时,使用 -trimpath-ldflags "-s -w" 选项可以有效地减小二进制文件的大小。希望本文能够帮助读者更好地理解这个编译过程,并为大家提供参考。

当然,在实际使用过程中,我们还需要考虑一些安全问题。例如,如何保证frpc配置文件的安全性?如何避免frpc被滥用造成的安全风险?这些问题需要我们在实际操作中进行综合考虑和处理。