gpt4 book ai didi

rust - 如何用 rustc 生成可执行文件?

转载 作者:行者123 更新时间:2023-11-29 08:24:06 34 4
gpt4 key购买 nike

如果我编译这个简单的程序 fn main() { println!("Hello"); } 使用 rustc test.rs -o test 然后我可以使用 ./test 运行它,但是在文件管理器中双击它会出现此错误:无法显示“测试”。没有为“共享库”文件安装应用程序。 运行 file test 似乎同意:test: ELF 64-bit LSB shared object...

如何获得 rustc 以及使用它的工具(如 cargo)来生成可执行文件而不是共享对象?

我使用的是 64 位 Linux (Ubuntu 14.10)。

编辑:我有 postedRust forum 上关于这个。

EDIT@:原来这是 file 可执行文件的问题。

最佳答案

我没有 Rust 编译器,也无法在互联网上找到它的文档,但我知道如何在 C 中执行共享对象与可执行文件,所以也许这些信息可以帮助您解决它。

不同之处在于链接器的 -pie 选项。使用 hello world C 程序:

$ gcc test.c -ohello -fPIC -pie
$ file hello
hello: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), not stripped

如果我们删除与位置无关的标志,我们将得到一个可执行文件:

$ gcc test.c -ohello
$ file hello
hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), not stripped

两个生成的文件在命令行中的工作方式相同,但我怀疑 file 看到的差异正在改变您的 GUI 的功能。 (再说一次,我不在 Ubuntu 上...我使用没有 gui 文件管理器的 Slackware,所以我无法证实自己,但我希望我的猜测能帮助你自己解决问题。)

那么,如果我在你的计算机上,接下来我会尝试检查 rustc 手册页或 rustc --help 并查看是否有关闭该 的选项-pie 链接器的选项。它代表“与位置无关的可执行文件”,因此也请在帮助文件中查找这些词。

如果未提及,请尝试 rustc -v test.rs -o test - 或帮助文件中的任何详细标志。那应该在最后打印出它用于链接的命令。它可能是对 gccld 的调用。您可以使用它来自己链接它(可能有一个标志 -c 或您可以传递给 rustc 的东西来告诉它只编译,不要链接,这将只保留它生成的 .o 文件)。

一旦你有了它,只需复制/粘贴调用的最终链接命令 rustc 并自己删除 -pie 选项......如果它存在......看看会发生什么。

手动复制/粘贴不是一件有趣的事,也无法使用工具,但如果你至少可以让它工作一次,你可以确认我的直觉,也许可以问一个不同措辞的问题来吸引更多的 Rust 用户' 注意。

您还可以告诉文件管理器如何打开共享对象文件并使用它们。如果管理器将它们视为程序 file 标识为可执行文件,就像命令行一样,那么一切都应该在不更改构建过程的情况下工作。虽然我不知道该怎么做,但也许在 ubuntu stack exchange 上询问会找到这样做的人。

关于rust - 如何用 rustc 生成可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27390523/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com