Компиляция статической библиотеки Rust и использование ее в C ++: неопределенная ссылка - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь скомпилировать библиотеку static в Rust, а затем использовать ее в своем коде C ++ (обратите внимание, что речь идет о вызове Rust из C ++, а не наоборот). Я просмотрел все учебники, которые смог найти в Интернете, и ответил на похожие вопросы, и, очевидно, я делаю что-то не так, хотя не могу понять, что.

Я создал минимальный пример для своей задачи:

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 unsafe 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();
}

Чтобы собрать библиотеку, в моем каталоге ржавчины я запустил:

сборка груза --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()

1 Ответ

0 голосов
/ 08 мая 2018

Искаженное имя в не стандартизировано, поэтому void hello_world_in_rust() может иметь другую связь по сравнению с . Вы можете принудительно установить одинаковую связь C на обоих языках, используя extern "C" как часть функции signature / prototype:

extern "C" void hello_world_in_rust();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...