gpt4 book ai didi

c - 编译 C 程序时无法链接到 Rust 编译的库

转载 作者:太空宇宙 更新时间:2023-11-04 04:39:14 26 4
gpt4 key购买 nike

我一直在尝试编译和运行从 C 调用 Rust 函数的最小示例。但是,我一直收到链接器错误:

$ gcc -L . test.c -ltest
C:\Users\...\AppData\Local\Temp\ccWuOBbj.o:test.c:(.text+0x16): undefined reference to `squared'
collect2.exe: error: ld returned 1 exit status

C 代码:

#include <stdio.h>

int squared(int);

int main() {
printf("5 * 5 = %d", squared(5));
return 0;
}

Rust 代码:

#![no_std]
#![feature(lang_items)]

extern crate core;

#[lang = "stack_exhausted"] extern fn stack_exhausted() {}
#[lang = "eh_personality"] extern fn eh_personality() {}
#[lang = "panic_fmt"] fn panic_fmt() -> ! { loop {} }

#[no_mangle]
pub extern "C" fn squared(x: isize) -> isize {
x * x
}

我正在使用 rustc --crate-type staticlib -o libtest.a test.rs 编译 Rust 代码

一些细节:

最佳答案

将“-ltest”放在“test.c”之后。 ld 只链接库文件的必需部分,并且不知道 squared() 是必需的,直到它看到从 test.c 生成的 .o 文件,此时 libtest.a 已经在还不需要函数时更早链接从它。

关于c - 编译 C 程序时无法链接到 Rust 编译的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28152418/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com