txiki.js 在 Void Linux 上的构建问题分析与解决方案
txiki.js 是一个基于 QuickJS 的轻量级 JavaScript 运行时环境,它提供了现代 JavaScript 特性和丰富的内置模块支持。在 Void Linux 系统上构建 txiki.js 时,开发者可能会遇到一个与 libffi 库安装路径相关的构建问题。
问题现象
当在 Void Linux 系统上执行标准构建流程时,构建过程会在链接阶段失败,错误信息显示无法找到 libffi.a 库文件。具体表现为 CMake 报告"No rule to make target 'ffi_root/usr/local/lib/libffi.a'"错误,尽管 libffi 实际上已经成功编译并安装到了系统中。
根本原因分析
这个问题源于 libffi 在多架构系统上的默认安装行为。在 64 位系统上,GCC 通常会使用"multi-os-directory"特性,导致库文件被安装到 lib64 目录而非预期的 lib 目录。具体表现为:
- libffi 的构建系统检测到系统支持多架构目录布局
- 默认情况下,64 位库会被安装到 lib64 而非 lib 目录
- txiki.js 的 CMake 配置中硬编码了 lib 目录路径来查找 libffi
- 这种路径不匹配导致构建系统无法找到已安装的库文件
解决方案
解决此问题的方法是通过在 libffi 的配置阶段添加 --disable-multi-os-directory 选项,强制库文件安装到标准 lib 目录而非架构特定的 lib64 目录。这一修改可以通过以下方式实现:
- 修改 txiki.js 项目中的 CMakeLists.txt 文件
- 在 libffi 的 ExternalProject_Add 配置中添加相应的配置选项
这种解决方案具有以下优点:
- 不影响其他系统的正常构建
- 在已经使用 lib 目录的系统上不会产生副作用
- 解决了路径不一致导致的构建失败问题
技术背景
多架构目录支持是现代 Linux 发行版中用于同时支持 32 位和 64 位库文件的机制。GCC 通过 --print-multi-os-directory 选项可以查询当前系统的多架构目录名称。在 64 位系统上,这通常会返回 "lib64"。
libffi 是一个提供外部函数接口的库,它允许程序调用不同编程语言或不同调用约定编写的代码。txiki.js 使用 libffi 来实现 JavaScript 与原生代码的互操作性。
构建建议
对于希望在 Void Linux 或其他类似系统上构建 txiki.js 的开发者,建议:
- 确保系统已安装所有必要的构建依赖
- 如果遇到类似构建问题,可以检查库文件的实际安装位置
- 考虑使用文中提到的解决方案修改构建配置
- 构建完成后,验证生成的可执行文件功能是否正常
这个问题的解决方案已经被合并到 txiki.js 的主干代码中,未来版本的构建过程将不再受此问题影响。
kernelopenEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。C081
baihu-dataset异构数据集“白虎”正式开源——首批开放10w+条真实机器人动作数据,构建具身智能标准化训练基座。00
mindquantumMindQuantum is a general software library supporting the development of applications for quantum computation.Python056
PaddleOCR-VLPaddleOCR-VL 是一款顶尖且资源高效的文档解析专用模型。其核心组件为 PaddleOCR-VL-0.9B,这是一款精简却功能强大的视觉语言模型(VLM)。该模型融合了 NaViT 风格的动态分辨率视觉编码器与 ERNIE-4.5-0.3B 语言模型,可实现精准的元素识别。Python00
GLM-4.7GLM-4.7上线并开源。新版本面向Coding场景强化了编码能力、长程任务规划与工具协同,并在多项主流公开基准测试中取得开源模型中的领先表现。 目前,GLM-4.7已通过BigModel.cn提供API,并在z.ai全栈开发模式中上线Skills模块,支持多模态任务的统一规划与协作。Jinja00
agent-studioopenJiuwen agent-studio提供零码、低码可视化开发和工作流编排,模型、知识库、插件等各资源管理能力TSX0135
Spark-Formalizer-X1-7BSpark-Formalizer 是由科大讯飞团队开发的专用大型语言模型,专注于数学自动形式化任务。该模型擅长将自然语言数学问题转化为精确的 Lean4 形式化语句,在形式化语句生成方面达到了业界领先水平。Python00