汇编语言在Linux发行版之间是否可移植?

3
一个以汇编格式发布的程序在 Linux 发行版之间(除了 CPU 架构差异)是否可移植?
以下是我提出问题的背景:我正在开发一种新的编程语言(名为 Aklo),其 modus operandi 将是经典的编译成 .s 文件,然后将结果传递给 GNU 汇编器。
显然,最终希望使用自身实现,但我已经接受了使用 C++ 进行维护以解决鸡生蛋问题:假设您第一次下载编译器,它本身就是用 Aklo 写的,那么您如何编译它?据我所知,不同的 Linux 发行版和其他类 Unix 系统有不同的二进制格式约定。
但是我刚刚想到,一个解决方案可能是提供 .s 文件(对于每个 CPU 架构都有一个):可以合理地假设您拥有或可以安装 GNU 汇编器。当然,我仍然需要一个引导编译器,但它不需要很快;我可以用 Python 编写它。
汇编器是否像二进制文件一样便携?我还没想到其他阻碍吗?
回答中添加的:
我曾向 LLVM 发出远眺,那里肯定有很多好东西,这会让我的生活变得更加轻松——除了它将产生依赖于安装正确版本的 LLVM。在开发机器上有这种依赖关系并不会太糟糕,但是在以源代码形式提供程序普遍的世界中,每个编写在 Aklo 中的程序的每个用户都会产生相同的依赖关系,并且我认为这是一个太高的代价。
但是,如果将编译后的程序作为汇编器提供的解决方案有效……那么就解决了这个问题,我可以继续使用 LLVM,这将是一个巨大的胜利。
因此,汇编器的可移植性问题比我最初意识到的要重要得多。
结论:从这里和 LLVM 邮件列表http://lists.cs.uiuc.edu/pipermail/llvmdev/2010-January/028991.html 的答案来看,坏消息是问题无法解决,但好消息是这意味着使用 LLVM 不会更糟,因此我可以自由使用它并获得所有优势。

https://dev59.com/okvSa4cB1Zd3GeqPf6B9 | https://dev59.com/eWQo5IYBdhLWcg3wMs4L | https://dev59.com/tW_Xa4cB1Zd3GeqP25gl - Ciro Santilli OurBigBook.com
3个回答

4

在深入研究此特定领域之前,你可能会想先查看LLVM。它可以让你的生活变得更容易,因为它提供了一个低级虚拟机器,可以使许多困难的事情变得简单,而且非常受欢迎。


LLVM是目前最严肃的虚拟机,但可能不适用于特定应用程序。值得看看竞争对手,例如Parrot VM。 - Charles Stewart

2

从非常高的层面上讲,ABI由{指令集、系统调用、二进制格式、库}组成。

将分发作为.s可能使您摆脱二进制格式。但这仍然是毫无意义的,因为您被固定在特定的ISA上,仍需要使用库和/或进行系统调用。库因分发而异(尽管这并不是真正的问题,特别是如果您只使用libc),而系统调用则因操作系统而异。


1

基本上距离我最后一次启动C编译器已经有20年了。在编译器的层面上,Linux发行版之间的差异是微不足道的。

选择LLVM的更重要的原因是跨平台;如果你不编写某种中间语言,那么你的编译器将极其难以针对不同的处理器进行重新定位。而且,就我的笔记本电脑而言,我有x86、x86_64、两种MIPS、PowerPC、ARM和AVR的编译器……你看到我要去哪里了吗?我还可以为大多数这些目标编译多种语言(只有AVR的C语言)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接