You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSL环境下Rust调用C函数遇linking with `cc`失败错误求解决

解决WSL2下Rust调用C函数的链接错误

问题描述

在WSL2(Windows 11 + Ubuntu 20.04.4 LTS)环境中,尝试从Rust调用C函数时出现链接错误,相同操作在Mac上可正常运行。rustc版本为1.63.0,执行以下命令时出错:

$ clang doubler.c -c
$ rustc main.rs -l doubler.o -L .

错误核心信息:

/usr/bin/ld: cannot find -ldoubler.o
collect2: error: ld returned 1 exit status

相关源码:

C头文件 doubler.h

const int FACTOR = 2;

int doubler(int x);

C实现文件 doubler.c

#include "doubler.h"
extern const int FACTOR;

int doubler(int x)
{
    return x * FACTOR;
}

Rust主文件 main.rs

extern "C" {
    fn doubler(x: i32) -> i32;
}

fn main() {
    unsafe {
        println!("{}", doubler(1));
    }
}

解决方案

方法一:直接链接目标文件

rustc的-l参数用于链接库文件(如libxxx.a或libxxx.so),而.o目标文件需要直接作为编译参数传入,无需-l。修改后的命令:

rustc main.rs doubler.o

方法二:打包为静态库后链接

如果习惯使用-l参数,可以先将目标文件打包成静态库,再进行链接:

  1. 生成静态库:
ar rcs libdoubler.a doubler.o
  1. 链接静态库:
rustc main.rs -l doubler -L .

原因说明

Linux下的链接器ld对-l参数的处理严格遵循规则:-lxxx会查找libxxx.a或libxxx.so文件,而Mac的链接器对该参数的处理更宽松,允许直接指定.o文件,这就是相同命令在Mac可用但WSL2下出错的原因。

内容的提问来源于stack exchange,提问作者Yoshikuni Kato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 19:36:30