一个以汇编格式发布的程序在 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 不会更糟,因此我可以自由使用它并获得所有优势。
以下是我提出问题的背景:我正在开发一种新的编程语言(名为 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 不会更糟,因此我可以自由使用它并获得所有优势。