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

推荐订阅源

Jina AI
Jina AI
大猫的无限游戏
大猫的无限游戏
T
Tailwind CSS Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
WordPress大学
WordPress大学
Last Week in AI
Last Week in AI
Hugging Face - Blog
Hugging Face - Blog
阮一峰的网络日志
阮一峰的网络日志
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理
V
V2EX
博客园 - 叶小钗
雷峰网
雷峰网
小众软件
小众软件
量子位
V
Visual Studio Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
The GitHub Blog
The GitHub Blog
Martin Fowler
Martin Fowler
G
Google Developers Blog
博客园_首页
博客园 - Franky
有赞技术团队
有赞技术团队
宝玉的分享
宝玉的分享

博客园 - 方东信

【far 语言】语言文档目录 【far 语言】注解系统 【far 语言】数组 【far 语言】并发编程(协程) 【far 语言】控制流 【far 语言】异常处理 【far 语言】函数 【far 语言】组合与继承 【far 语言】接口与泛型 【far 语言】List 列表 【far 语言】Map 映射 【far 语言】原生内存与 FFI 【far 语言】字符串 【far 语言】语法总览 【far 语言】类型系统 Java 远程调用类,控制类的办法,老了,记不住了。靠 java opc ua 基于s7 音视频:JavaCV 采集桌面画面并显示的方法 pand3d实现服务端渲染并推流 UI弹窗遮罩屏蔽触发事件的处理 far的数据类型 Windows下Tesseract-OCR的安装与使用 LoRA配置 大模型三阶段训练方法(LLaMa Factory) windows系统下anaconda的安装和使用 trl ppo 【手把手从零实现】Qwen2.5-VL:环境配置/功能实验(图片识别理解、目标检测、文字OCR、文档解析、视频理解)/模型微调(MS-Swift 和 LLaMA-Factory) seata 1.8.0 报错大全 Springboot 报错 java.lang.IllegalStateException: block()/blockFirst()/blockLast() are blocking vLLM部署多模态大模型Qwen2.5-VL-3B-Instruct
【far 语言】farcc 构建工具
方东信 · 2026-09-13 · via 博客园 - 方东信

本文是「far 语言」系列文档之一,总目录见《【far 语言】语言文档目录》。

farcc:一键打包 far 应用

farcc 是 far 的编译器命令行工具,对标 Go 的 go build——一条命令把 far 应用编译成单个自包含可执行文件(运行时 + 标准库 + 你的代码全编译进去,目标机器零依赖)。

安装与依赖

farcc 是 Java 程序(编译器前端),需要 Java 21+。编译时自动定位 clang:

平台 clang 定位顺序
Windows FAR_CLANG 环境变量 → farcc 安装目录旁的 llvm-mingw/PATH
Linux FAR_CLANG 环境变量 → PATHclang(如 sudo apt install clang

标准库目录自动定位:FAR_STD → farcc 安装目录旁的 farlang/src/std → 上级目录查找。

基本用法

farcc <src目录>                  # 编译 <src>/app.far → <src>/<目录名>.exe
farcc <src目录> -o myapp.exe     # 指定输出名
farcc <src目录> -O0              # 关闭优化(默认 -O2)
farcc <src目录> -strip           # 剥离符号表减小体积
farcc <src目录> -verbose         # 打印编译过程

输出与目录结构

myapp/
├── app.far          # 你的源码(任意命名,main 在入口文件)
├── model.far
└── build/           # 中间产物(app.ll / app.o)——自动生成,可删除
└── myapp.exe        # 最终可执行文件(Linux 下为 myapp,无后缀)
  • 产物完全自包含:拷贝到任意机器即可运行,无需安装 Java/clang/far 运行时
  • Windows 产物 .exe;Linux 产物为无后缀 ELF
  • 中间产物隔离在 build/,不污染源码目录(运行时以预编译 far_rt-win.a 归档链接,build 不再出现 .c 源码)

与模块 import 配合

farcc 自动处理 import 的路径定位:

// myapp/ 下有 model.far,或使用标准库 List/File
import { Box } from "model.far";     // 相对 src 根
import List from "List.far";          // 相对标准库目录

跨平台

  • Windows:farcc 在 Windows 上编译出 Windows 可执行文件
  • Linux:farcc 在 Linux(或 WSL)上编译出 Linux ELF
  • 在哪台机器跑 farcc,就产出那个平台的程序(宿主工具链模型)

交叉编译(在 Windows 上产出 Linux/arm64 程序)规划中。

示例

# 编译 myapp 目录
farcc myapp
# 输出 myapp/myapp.exe,直接运行
./myapp/myapp.exe

常见问题

  • 找不到 clang:设置 FAR_CLANG 指向 clang 完整路径,或安装 clang 并加入 PATH
  • import 报找不到文件:确认 from 路径相对 src 根;标准库类(List/File)用相对 stdDir 的路径
  • 编译失败:用 -verbose 查看详细过程,中间产物在 <src>/build/

安装目录结构(发布包)

解压 farcc 发布包后(放任意目录,如 C:\farcc~/farcc):

farcc/
├── farcc.sh / farcc.bat     # 入口脚本(farcc <src> [-flags],自动定位 jar/java/clang)
├── farcc.jar                # 编译器核心(Java 21 运行)
├── lib/
│   ├── far_rt-win.a         # 预编译运行时归档(带调试信息;farcc 链接用,编译不再现编 .c)
│   └── hutool-all-5.7.6.jar # 编译器依赖
├── llvm-mingw/              # 捆绑工具链(Windows 版 clang,Windows 免装直接用)
└── std/                     # 标准库(List.far / File.far ...)
  • Windowsfarcc.bat <src>;clang 用捆绑的 llvm-mingw/(也可用 FAR_CLANG/PATH 覆盖)
  • Linuxfarcc.sh <src>;clang 用系统安装的(apt install clang),java 用 PATH 的 Java 21
  • 标准库std/ 目录自动被 import 定位;可用 FAR_STD 指向自定义位置
  • 移动整个 farcc/ 目录即可迁移安装(无注册表/系统级依赖,除 Java 21)

注:farcc 本身是 Java 程序(编译器),编译产物 exe 是自包含原生程序,运行不需要 Java。

Rust编程语言群 1036955113
java新手自学群 626070845
java/springboot/hadoop/JVM 群 4915800
Hadoop/mongodb(搭建/开发/运维)Q群481975850
GOLang Q1群:6848027
GOLang Q2群:450509103
GOLang Q3群:436173132
GOLang Q4群:141984758
GOLang Q5群:215535604
C/C++/QT群 1414577
单片机嵌入式/电子电路入门群群 306312845
MUD/LIB/交流群 391486684
Electron/koa/Nodejs/express 214737701
大前端群vue/js/ts 165150391
操作系统研发群:15375777
汇编/辅助/破解新手群:755783453
大数据 elasticsearch 群 481975850
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。