assembly 为什么编译后的rust代码的汇编输出不包含任何asm指令?

webghufk  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(185)

我在compiler explorer中编写了以下代码片段:

fn foo() -> u8 {
    54
}

fn bar() -> u128 {
    3423
}

fn main() {

    let a: (u8, u128) = (foo(), bar());

    println!("foo result: {}", a.0);
    println!("bar result: {}", a.1);

}

程序集版本如下:

.text
        .file   "example.db4da305-cgu.0"
        .type   __rustc_debug_gdb_scripts_section__,@object
        .section        .debug_gdb_scripts,"aMS",@progbits,1,unique,1
        .weak   __rustc_debug_gdb_scripts_section__
__rustc_debug_gdb_scripts_section__:
        .asciz  "\001gdb_load_rust_pretty_printers.py"
        .size   __rustc_debug_gdb_scripts_section__, 34

        .section        .debug_aranges,"",@progbits
        .section        ".note.GNU-stack","",@progbits

我对汇编不是很熟悉,但我对它的一点了解告诉我,这并不包括任何实现这些函数的asm指令,这只是指令。
我是否以错误的方式使用编译器资源管理器?(检查标志或其他内容)
这是我的代码片段的link

pxyaymoc

pxyaymoc1#

fn main变更为pub fn main会输出正确的组件。
下面是来自rust示例的注解:

// Type your code here, or load an example.
pub fn square(num: i32) -> i32 {
    num * num
}

// If you use `main()`, declare it as `pub` to see it in the output: <- This is important
// pub fn main() { ... }
hts6caw3

hts6caw32#

默认情况下,你正在编译一个库。由于你的 library 没有任何公共符号,它什么也不做,你的asm是空的。
解决方案:

  • 将您的库main声明为public:pub fn main()
  • 编译二进制文件:

相关问题