我一直在尝试编译并运行一个从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
一些细节:
1.0.0-nightly (4e4e8cff1 2015-01-24 22:14:14 +0000)
4.8.1
答案 0 :(得分:0)
Put&#34; -ltest&#34; 之后&#34; test.c&#34;。 ld只链接到库档案的必需部分,并且在看到test.c生成的.o文件之前不知道squared()是什么,此时libtest.a已经在没有函数的情况下提前链接了但需要它。