linux - Rust 无法在 Linux 中编译为可执行文件
问题描述
rustc
在 Linux 上使用或cargo build
生成共享库而不是可执行文件来编译 rust 。
我的文件管理器(thunar)和file
命令将该文件类型显示为共享库。
并且编译后的二进制文件只能通过终端通过$ /path/to/file
or执行$ 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,未剥离`
解决方案
- 您的编译器会生成一个可执行文件。共享库和动态链接的可执行文件之间没有太大区别。它们遵循相同的基本格式。该字符串
interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0
表明这是一个可执行文件而不是库。图书馆通常没有解释器集。尝试file
在您知道是可执行文件的一些文件上运行,以及在您知道是库的其他一些文件上运行,并亲自查看。解释器通常是加载和执行共享对象的小型系统程序。一个文件实际上可以同时作为一个库和一个可执行文件(最常见的例子是你的libc.so.6
或者你的系统上调用的任何东西;尝试运行它)。 - 如果您可以从 shell 运行此可执行文件,但不能从文件管理器运行,则问题出在文件管理器上,而不是可执行文件。您可能必须专门指示文件管理器您的程序应该在终端中运行。这通常可以通过创建描述程序的 .desktop 文件来完成。此外,桌面工具可能会将现代可执行文件误识别为共享库。这是一个常见的问题。它也可以通过为您的可执行文件创建一个 .desktop 文件来解决。它不是以任何方式专门针对生锈的。
最重要的是,您运行它们的方式或方式rustc
没有任何问题。cargo
推荐阅读
- c - 结构中的字符串正在从 C 中的文件读取的 while 循环中更改
- multithreading - 范围“作业”对于当前线程无效,没有可用于作业范围 Spring-Batch 的上下文持有者
- d3.js - D3 V6中嵌套和组函数的等效组代码是什么
- javascript - UnhandledPromiseRejectionWarning, readfile, writefile, async
- java - 未从 Firestore 获取 DatabaseReference
- twilio - Twilio 在 SIP 呼叫上播放保持音乐
- angular-cli - 为什么 Angular 项目文件夹变成了只读的?
- python - 使用多 GPU 和两阶段 CNN 模型的问题
- c++ - 删除指针后出现分段错误(核心转储)
- tailwind-css - 在反应中自定义tailwindcss主题(使用vite)没有效果