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

时间:2015-01-26 14:47:26

标签: c gcc rust ffi

我一直在尝试编译并运行一个从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代码

一些细节:

1 个答案:

答案 0 :(得分:0)

Put&#34; -ltest&#34; 之后&#34; test.c&#34;。 ld只链接到库档案的必需部分,并且在看到test.c生成的.o文件之前不知道squared()是什么,此时libtest.a已经在没有函数的情况下提前链接了但需要它。