新闻详情

新闻详情

首页 / 资讯中心 / 详情

scriptc原生对象输出实战:4步将TypeScript程序嵌入外部C构建的完整教程

发布时间:2026/10/2 11:22:41来源:尧图网络
scriptc原生对象输出实战:4步将TypeScript程序嵌入外部C构建的完整教程
scriptc原生对象输出实战4步将TypeScript程序嵌入外部C构建的完整教程【免费下载链接】scriptcTypeScript-to-Native Compiler项目地址: https://gitcode.com/GitHub_Trending/sc/scriptcscriptc 是一个 TypeScript-to-Native 编译器能把 TypeScript 和 JavaScript 直接编译为原生机器码生成不依赖 Node 和 JS 引擎的可执行文件。本篇实战教程带你用 scriptc 的原生对象输出能力--emitobjnative-link-info在 4 个步骤内把 TypeScript 程序编译成可重定位目标文件并嵌入你自己掌控的外部 C 构建流程全程无需 Node 运行时。一、先搞懂scriptc 原生对象是什么用scriptc build --emitobj会产出一个可重定位的程序目标文件program object它有两个关键特点它定义main这是一个完整的程序对象最终要参与外部原生链接变成可执行文件而不是加载进别的进程的库。如果你想做宿主可调用的静态库应该改用scriptc build --lib --profile ...。它自带运行时契约目标文件保留了未定义的scr_*运行时符号引用并强引用一个版本化 ABI 标记符号。这意味着链接阶段就会校验运行时版本——版本不匹配时直接链接失败而不是带病启动后悄悄崩溃。产出物会累积在.scriptc/目录中重新构建只会更新对应文件。二、4步实战TypeScript C FFI 的外部链接下面的流程完全基于仓库里可直接运行的示例 examples/native-object/它包含一个 TypeScript 主程序、一个 C 语言 FFI 函数和一套链接消费脚本。第 1 步用 C 编译器把 FFI 实现编成对象示例中 native.c 只有一行实现把参数乘以 2先用 clang 单独编译它$ clang -target arm64-apple-macosx14.0.0 -O2 -c native.c -o native.o注意这里 clang 只负责编译 C 代码不参与编译 TypeScript 程序本体——那是 scriptc 的专属工作。第 2 步编译 TypeScript 并导出链接配方JSONTypeScript 端在 main.ts 中声明一个外部函数并调用它declare function nativeDouble(value: number): number; console.log(nativeDouble(21));FFI 声明写在 ffi.json 中把nativeDouble映射到 C 符号native_double参数/返回值均为f64并指定要链接进./native.o。执行$ scriptc build main.ts --ffi ffi.json --printnative-link-info -o app.o link-info.json这条命令做两件事输出目标文件app.o并把一份机器可读的native-link-infoJSON 配方打印到标准输出。第 3 步方式 A —— 用 C 编译器当链接驱动$ node link.mjs cc link-info.json app-cc $ ./app-cc 42示例的 link.mjs 会读取配方校验运行时包的版本和每个产物的 SHA-256 哈希然后把配方里声明的目标文件、归档、系统库按顺序喂给 clang 完成最终链接。第 4 步方式 B —— 直接调用平台链接器$ node link.mjs ld link-info.json app-ld $ ./app-ld 42这条路径通过xcrun定位所选 SDK 与 Appleld手动指定最低系统版本、全部有序输入和系统库。两种入口最终都得到能正确输出42的可执行文件。三、读懂 native-link-info 配方为什么它可靠scriptc.native-link-info.v1文档是一份零隐藏依赖的链接清单核心字段包括字段类别内容为什么重要target目标三元组、对象格式、架构、最低 OS、重定位模型保证链接器拿到正确的平台参数programmain入口、版本化运行时 ABI 标记链接期即可拦截 ABI 不匹配runtime_pack已安装预编译运行时包根目录、对象与归档、大小、哈希每个产物都可逐一校验link有序的程序/FFI/运行时输入、系统库与框架外部工具链只需照单全收这份配方从不引用 scriptc 的隐藏缓存路径——所有路径要么是配方内声明的已验证产物要么是绝对路径因此可以安全地在 CI 或第三方构建系统中消费。实现细节可参考 native-link-info.ts 与 native-link-info-core.ts。四、注意事项新手最容易踩的 3 个坑运行时包版本必须精确相等。外部对象 ABI 目前是实验性的比语义化版本更严格必须消费同一套 scriptc 安装所报告的、完全相同版本号的运行时包混用不同版本会在链接期报缺失符号。对象 ≠ 库。app.o定义了main是给程序用的想把它作为函数库暴露给宿主调用请改走--lib归档接口。跨平台要配对的链接器。示例跑在 macOS arm64 上Linux 对象需要目标 glibc 或 musl 的链接器/sysrootWindows x64 对象使用 Zig 的 MinGW sysrootWASI 对象需要 Preview 1 链接器/sysroot。五、延伸阅读完整可运行示例examples/native-object/README.md官方文档Native Program Objectsdocs/src/app/native-objects/page.mdxFFI 清单约定docs/src/app/ffi/CLI 入口实现packages/cli/src/command.ts 如果你希望在本机完整复现可先执行npm install -g scriptc安装编译器或从 scriptc 仓库 克隆源码后在examples/native-object/目录里按 README 依次执行 4 条命令即可。【免费下载链接】scriptcTypeScript-to-Native Compiler项目地址: https://gitcode.com/GitHub_Trending/sc/scriptc创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

AI编程助手技能扩展机制:SKILL.md编写与Claude Code实战指南 2026/10/2 12:15:34

AI编程助手技能扩展机制:SKILL.md编写与Claude Code实战指南

1. 从"skills"这个模糊词说起:它到底指什么第一次看到"skills"这个标题,很多人会一头雾水。它既不是某个具体软件的名字,也不是一个明确的技术名词,而是一个在AI编程工具生态里被反复提及、却很少有人系统讲清…

阅读更多 →
Superpowers 技能包实战:让 AI 编程助手像资深工程师一样工作 2026/10/2 12:15:33

Superpowers 技能包实战:让 AI 编程助手像资深工程师一样工作

1. 从“超能力”到工程实践:superpowers 到底是个什么东西第一次看到 superpowers 这个词,很多人脑子里蹦出来的可能是游戏里的技能树、科幻电影里的超能力设定,或者某个新出的效率工具。但如果你最近在开发者社区、技术群或者代码托管平台上…

阅读更多 →
用大模型MCP采集数据:TaoToken统一Key接入playwright mcp的CLI配置骨架 2026/10/2 12:15:27

用大模型MCP采集数据:TaoToken统一Key接入playwright mcp的CLI配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
IS61WV25616EDBLL-8BLI异步SRAM备份与软ECC设计实践 2026/10/2 12:15:27

IS61WV25616EDBLL-8BLI异步SRAM备份与软ECC设计实践

1. 别被标题骗了——这其实是个数据可靠性工程问题第一次在BOM表里看到IS61WV25616EDBLL-8BLI这颗料时,团队正面临一个很现实的问题:4Mbit高速异步SRAM的采购周期越来越不可控,国产替代的呼声从供应链一路传到研发。但真正把替代评估单递到我…

阅读更多 →
Sub-1G射频接收器国产化替代:物联网终端降本与硬件调试实战 2026/10/2 12:15:27

Sub-1G射频接收器国产化替代:物联网终端降本与硬件调试实战

在国内做物联网终端的硬件工程师,这两年听到最多的一句话大概是“这颗料又涨价了”或者“交期又排到半年后了”。尤其是Sub-1G射频接收器这类芯片,过去很多项目默认就用进口方案,性能确实稳,但价格、交期、供货连续性在特殊时期都…

阅读更多 →
Spring Boot 整合 weixin-java-miniapp 实现小程序微信登录:TaoToken 统一 Key 配置实战 2026/10/2 12:15:27

Spring Boot 整合 weixin-java-miniapp 实现小程序微信登录:TaoToken 统一 Key 配置实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉