编译 Rust 静态库并在 C++ 中使用它:未定义的引用

问题描述 投票:0回答:1

我正在尝试在 Rust 中编译一个

static
库,然后在我的 C++ 代码中使用它(注意这是从 C++ 调用 Rust,而不是相反)。我浏览了我在网上可以找到的所有教程,并回答了类似的问题,我显然做错了什么,尽管我看不出是什么。

我为我的问题创建了一个最小的例子:

1。 Cargo.toml :

[package]
name = "hello_world"
version = "0.1.0"

[lib]
name = "hello_in_rust_lib"
path = "src/lib.rs"
crate-type = ["staticlib"]

[dependencies]

2。 lib.rs :

#[no_mangle]
pub extern "C" fn hello_world_in_rust() {
    println!("Hello World, Rust here!");
}

3. hello_world_in_cpp.cpp :

extern void hello_world_in_rust();

int main() {
    hello_world_in_rust();
}

为了构建库,我在我的 rust 目录中运行了:

货物构建--lib

(一切顺利) 我继续在我的 C++ 文件夹中运行:

clang++ hello_world_in_cpp.cpp -o hello.out -L ../hello_world/target/release/ -lhello_in_rust_lib

这导致了以下错误:

/tmp/hello_world_in_cpp-cf3577.o:在函数中

main

hello_world_in_cpp.cpp:(.text+0x5):对

hello_world_in_rust()

的未定义引用
c++ linker rust static-libraries
1个回答
4
投票

c++c

 相比,
void hello_world_in_rust()extern "C"
 作为函数签名/原型的一部分来强制在两种语言中使用相同的 C 链接:

extern "C" void hello_world_in_rust();
    
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.