当我使用链接器ld链接rust生成的程序集文件时,为什么会出现一个错误

当我使用链接器ld链接rust生成的程序集文件时,为什么会出现一个错误,rust,llvm,ld,Rust,Llvm,Ld,1,我使用以下指令生成LLVM IR rustc--emit=llvm ir main.rs 2,然后使用LLC转换为汇编代码 llc-10 main.ll -o main.s 3,要将main.s编译成可执行文件吗 使用汇编程序--as as-o main.o main.s 使用链接器--ld ld-s-o main.o 同时出现了一个错误,即“未定义对rust_eh_人格的引用”。 我想问为什么以及如何做?这是否回答了您的问题?欢迎来到StackOverflow!看起来您只需要链接Rus

1,我使用以下指令生成LLVM IR
rustc--emit=llvm ir main.rs

2,然后使用LLC转换为汇编代码

llc-10 main.ll -o main.s
3,要将main.s编译成可执行文件吗 使用汇编程序--as
as-o main.o main.s
使用链接器--ld
ld-s-o main.o
同时出现了一个错误,即“未定义对rust_eh_人格的引用”。


我想问为什么以及如何做?

这是否回答了您的问题?欢迎来到StackOverflow!看起来您只需要链接Rust标准库,就像您需要使用大多数C代码一样。这是可能的(至少是动态的,使用工具链的
lib
dir中的文件),但不常见。另外,Rust使用了一个稍加修改的LLVM,它没有
llc
命令,因此IR/位码可能与您的
llc
版本不兼容<据我所知,code>rustc的IR输出仅用于调试。你能详细解释一下你的用例吗?为什么你要发射IR并使用
llc
而不是像对象文件这样编译的东西?说清楚了,你的问题基本上是可以回答的,但我高度怀疑这不是实现最终目标的最佳方式,这就是为什么了解更大的图景会很有用。谢谢你回答我的问题。我的最终目标是使我的LLVM过程在RUST代码中工作,因此我计划将RUST代码转换为IR,并使用OPT加载过程,然后从加载过程的IR代码生成一个可执行文件。在C/C++中,这很容易,但我不知道如何在Rust中正确执行此操作,所以我的问题是如何在Rust中加载我的LLVM过程。@Coder-256谢谢。现在我还认为,在使用rustc将Rust代码转换为IR后,使用本机LLVM提供的LLI和LLC工具可能会导致问题,因为Rust使用的LLVM已更改。值得一提的是,我使用-L链接rust库目录,结果是相同的。ld-L/home/me/snap/rustup/common/rustup/toolschains/1.46.0-x86_64-unknown-linux-gnu/lib-o main.o