首页 > 解决方案 > Rust 无法在 Linux 中编译为可执行文件

问题描述

rustc在 Linux 上使用或cargo build生成共享库而不是可执行文件来编译 rust 。
我的文件管理器(thunar)和file命令将该文件类型显示为共享库。

并且编译后的二进制文件只能通过终端通过$ /path/to/fileor执行$ cargo run
该文件不能像其他可执行文件一样通过双击来执行。
命令的输出file

$ file rust_bin

rust_bin:ELF 64 位 LSB 共享对象,x86_64,版本 1 (SYSV),动态链接,解释器 /lib64/ld-linux-x86-64.so.2,用于 GNU/Linux 3.2.0,BuildID[sha1]= cb8cd ...,带有 debug_info,未剥离`

标签: linuxrustrust-cargo

解决方案


  1. 您的编译器会生成一个可执行文件。共享库和动态链接的可执行文件之间没有太大区别。它们遵循相同的基本格式。该字符串interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0表明这是一个可执行文件而不是库。图书馆通常没有解释器集。尝试file在您知道是可执行文件的一些文件上运行,以及在您知道是库的其他一些文件上运行,并亲自查看。解释器通常是加载和执行共享对象的小型系统程序。一个文件实际上可以同时作为一个库和一个可执行文件(最常见的例子是你的libc.so.6或者你的系统上调用的任何东西;尝试运行它)。
  2. 如果您可以从 shell 运行此可执行文件,但不能从文件管理器运行,则问题出在文件管理器上,而不是可执行文件。您可能必须专门指示文件管理器您的程序应该在终端中运行。这通常可以通过创建描述程序的 .desktop 文件来完成。此外,桌面工具可能会将现代可执行文件误识别为共享库。是一个常见的问题。它也可以通过为您的可执行文件创建一个 .desktop 文件来解决。它不是以任何方式专门针对生锈的。

最重要的是,您运行它们的方式或方式rustc没有任何问题。cargo


推荐阅读