在CentOS上集成Rust與其他語言可參考以下方案,以Python和Java為例:
安裝Rust環境
使用rustup安裝Rust工具鏈:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
編寫Rust代碼并編譯為動態庫
#[no_mangle]和pub extern "C"標記:// lib.rs
#[no_mangle]
pub extern "C" fn add(a: i32, b: i32) -> i32 {
a + b
}
cargo build --release
# 生成libadd.so
Python調用Rust動態庫
ctypes或PyO3庫加載動態庫:# ctypes示例
import ctypes
lib = ctypes.CDLL("./libadd.so")
print(lib.add(1, 2)) # 輸出3
PyO3生成Python模塊(需安裝maturin):maturin develop
安裝Rust與Java環境
確保已安裝JDK和Rust工具鏈。
編寫Rust代碼并生成JNI接口
#[no_mangle]標記需被Java調用的函數:// lib.rs
#[no_mangle]
pub extern "C" fn greet(name: *const u8) -> *mut u8 {
let name_str = unsafe { std::ffi::CStr::from_ptr(name) }.to_str().unwrap();
let response = format!("Hello, {}!", name_str);
response.into_bytes().leak().as_ptr()
}
cargo build --release
Java通過JNI調用Rust
// HelloRust.java
public class HelloRust {
static {
System.loadLibrary("libhello_rust.so");
}
public native String greet(String name);
public static void main(String[] args) {
System.out.println(new HelloRust().greet("World"));
}
}
javac HelloRust.java
javah -jni HelloRust
rustup target add x86_64-unknown-linux-musl)避免依賴問題。mmap)處理。bytes庫)減少內存復制開銷。