汇编程序格式的程序是否可以在Linux发行版之间移植(模块化CPU架构差异)?
这是我的问题的背景:我正在研究一种新的编程语言(名为Aklo),其运作方式将是经典编译为.s并将结果提供给GNU汇编程序。
显然最终将自己编写实现会很好,但是我已经辞职了,用C ++来维护它以解决鸡和蛋问题:假设你是第一次下载编译器并且它本身是用Aklo,你怎么编译它?据我了解,不同的Linux发行版和其他类UNIX系统对二进制格式有不同的约定。
但是我刚刚想到,解决方案可能是运送.s文件(好吧,每个CPU架构一个):假设你已经或可以安装GNU汇编程序是公平的。当然我还需要一个bootstrap编译器,但这不需要很快;我可以用Python编写它。
汇编程序是否可以以二进制文件的方式移植?还有其他我没想过的绊脚石吗?
在回答一个答案后添加:
我对LLVM非常满意,肯定会有很多好东西,它会让我的生活更轻松 - 除了它会导致依赖正确安装的LLVM版本。拥有对开发机器的依赖性并不是那么糟糕,但在一个将程序作为源代码发送的世界中,对于在Aklo中编写的每个程序的每个用户都会产生相同的依赖关系,我认为这也是很高的代价。
但是如果将编译后的程序作为汇编程序的解决方案工作......那就解决了这个问题,毕竟我可以使用LLVM,这将是一个巨大的胜利。
因此,关于汇编程序的可移植性的问题甚至比我最初意识到的要重要得多。
结论:从这里和LLVM邮件列表http://lists.cs.uiuc.edu/pipermail/llvmdev/2010-January/028991.html的答案来看,似乎坏消息是问题无法解决,但好消息是使用LLVM意味着它不会变得更糟,所以我可以自由地这样做并获得其所有优势。
答案 0 :(得分:4)
您可能需要在沿着此特定路径前查看LLVM。它可能会让你的生活变得更加轻松,因为它提供了一个low level virtual machine,它可以让很多有用的东西在工作并且非常受欢迎。
答案 1 :(得分:2)
在很高的层次上,ABI由{指令集,系统调用,二进制格式,库}组成。
分发为.s
可能会使您摆脱二进制格式。这仍然是毫无意义的,因为您已修复到特定的ISA并仍需要使用库和/或进行系统调用。库从分发到分发各不相同(虽然这并不是那么糟糕,特别是如果你只使用libc)并且系统调用因操作系统而异。
答案 2 :(得分:1)
我上次引导C编译器已经20年了。在编译器级别,Linux发行版之间的差异很小。
进入LLVM的更重要的原因是跨平台;如果你没有编写一些中间语言,你的编译器将很难重新定位到不同的处理器。在我的笔记本电脑上看,我有x86,x86_64,两种MIPS,PowerPC,ARM和AVR的编译器......你知道我要去哪里吗?我也可以为大多数这些目标编译多种语言(仅限C表示AVR)。