静态库、动态库和 ABI
前面几篇讲的是函数级 FFI:extern "C"、字符串、内存归属、回调和 void *ctx。
真正交付给 C 项目时,还要回答另一个问题:
C 工程到底链接什么文件?
头文件声明哪些符号?
这些符号的 ABI 能不能长期稳定?
升级 Rust 代码后,C 侧要不要改?
C 开发者熟悉 .a、.so、.h 和 ABI。Rust 交付给 C 使用时,也要回到这些概念,而不是把 Cargo 内部模型暴露给 C。
前面几篇讲的是函数级 FFI:extern "C"、字符串、内存归属、回调和 void *ctx。
真正交付给 C 项目时,还要回答另一个问题:
C 工程到底链接什么文件?
头文件声明哪些符号?
这些符号的 ABI 能不能长期稳定?
升级 Rust 代码后,C 侧要不要改?
C 开发者熟悉 .a、.so、.h 和 ABI。Rust 交付给 C 使用时,也要回到这些概念,而不是把 Cargo 内部模型暴露给 C。