简介
龙芯NBL是一款让LoongArch原生程序能够加载并执行x86动态链接库的异构库加载器。NBL运行在LoongArch用户态,基于动态二进制翻译技术,将x86库中的指令翻译为LoongArch指令执行,使LoongArch程序能够在同一进程中调用x86库,无需重新编译被调用方,也无需修改操作系统内核。NBL提供SDK,开发者只需对原生应用进行少量适配,包括替换动态库加载接口(如dlopen、dlsym)以及按需注册宿主函数或数据符号,即可在保持业务逻辑不变的情况下复用现有x86软件资产。
NBL可应用于多种场景。例如,在Java、Python、Node.js等语言生态中,相关运行时的技术适配已经完成。在这些集成NBL的龙架构运行时上,符合当前兼容范围的应用无需修改,即可通过原有的原生扩展机制调用x86库,包括Java的JNI/JNA、Python的CPython C API及ctypes/CFFI/Cython、Node.js的N-API及.node模块。部分运行时已在实际客户场景中得到验证。此外,NBL已在扫描仪等外设配套原生库的实际客户场景中得到应用,也可用于行业中间件、商业软件等仅提供x86原生库的场景,开发者通过NBL SDK进行少量适配,即可复用现有x86库。
龙芯NBL 0.8是首个对外试用版本(EA),当前支持64位LoongArch平台与64位x86 ELF共享库。
相关适配运行时暂未随本次试用版发布,后续将另行发布获取方式和使用说明。
更多内容见使用手册。
核心能力
- 沿用libdl使用习惯:提供
dlopen/dlclose/dlinfo/dlerror/dlsym等接口 - 签名化查找与自动桩生成:给出函数签名即自动生成跨架构调用桩
- 双向桥接:龙芯侧函数注册给翻译后的x86_64代码回调
- 变长参数:支持printf风格与CPython风格变长接口
- 常见C/C++数据类型支持:整型、浮点、枚举、数组、指针、结构体、联合体、位域等,按真实对齐与尾部填充自动编组
- 纯用户态实现:无需内核改造,可随操作系统升级