我想从 Rust 程序构建一个动态库并将其链接到现有的 C++ 项目。对于 C++ 项目,我们一直坚持使用 gcc 进行编译(一个相对较旧的 gcc 4.8.2,但我也在尝试使用 gcc 7.3.0 进行同样的问题)。
这是该问题的最小示例:
源代码/库.rs
#[no_mangle]
pub unsafe extern "C" fn hello() {
println!("Hello World, Rust here!");
}
Run Code Online (Sandbox Code Playgroud)
Cargo.toml
[package]
name = "gcc-linking"
version = "0.1.0"
authors = ..
edition = "2018"
[lib]
crate-type = ["dylib"]
[dependencies]
Run Code Online (Sandbox Code Playgroud)
你好.cpp:
extern "C" void hello();
int main() {
hello();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在,当我与 链接时clang,一切都很好:
cargo build --lib
clang -L target/debug -l gcc_linking hello.cpp -o hello
LD_LIBRARY_PATH=target/debug:$LD_LIBRARY_PATH ./hello
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,这会导致:
Hello World, …Run Code Online (Sandbox Code Playgroud)