Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在编译器中包含汇编程序_Java_Assembly_Compiler Construction - Fatal编程技术网

Java 如何在编译器中包含汇编程序

Java 如何在编译器中包含汇编程序,java,assembly,compiler-construction,Java,Assembly,Compiler Construction,我目前参加了一门编译器课程,并成功地用JAVA构建了一个小型编译器,它接受一个文件作为输入并编写NASM输出。 然而,我想知道,如果我决定分发我的编译器,我将如何用它打包汇编程序 我确信我不能要求最终用户首先将代码编译到NASM,确保他/她安装了NASM,然后使用它来构建最终的可执行文件 另外,由于我想针对几个不同的系统,为每个目标编写一个高效的汇编程序显然是一项艰巨而耗时的任务(更不用说看似不可能的任务了!) 非常感谢您的帮助。您可以选择一个开源汇编程序,并将其与编译器一起打包。注意许可证。然

我目前参加了一门编译器课程,并成功地用JAVA构建了一个小型编译器,它接受一个文件作为输入并编写NASM输出。

然而,我想知道,如果我决定分发我的编译器,我将如何用它打包汇编程序


我确信我不能要求最终用户首先将代码编译到NASM,确保他/她安装了NASM,然后使用它来构建最终的可执行文件

另外,由于我想针对几个不同的系统,为每个目标编写一个高效的汇编程序显然是一项艰巨而耗时的任务(更不用说看似不可能的任务了!)


非常感谢您的帮助。

您可以选择一个开源汇编程序,并将其与编译器一起打包。注意许可证。然而,汇编程序的许可证也可能要求您在特定许可证下发布编译器

当然,这并不能解决第二个问题:如何使这个平台(或至少是CPU)独立。那么,使用汇编语言(或直接使用机器代码)就不是一条好路

解决方案可能是使用其他人的后端。LLVM目前有些“热门”。在某种程度上,这是通过向LLVM发送“独立于平台的汇编语言”来实现的,然后LLVM为您输出目标平台的目标代码。

看来,至少对于
Windows
Mac OS X
平台,
NASM
汇编程序可以简单地部署在
zip
文件中

您只需将
zip
文件与应用程序一起分发,并在需要时将相应的特定于平台的
zip
解压缩到临时目录中,然后在后台运行该工具


在采取行动之前需要澄清的其他一些主题:

  • 如何使用
    Java
    创建临时目录
  • 如何使用
    Java
    解压归档文件
  • 如何将可执行文件标记为可执行文件(例如,如何设置
    chmod+x
    ),而不威胁用户
  • 如何在
    Java
    中生成等待后台进程
  • NASM的重新分配许可政策是什么
  • NASM
    是否有不常见的第三方依赖项,这些依赖项也必须提供
  • 如何编写跨平台
    Java
    代码以及如何进行多平台测试

“我确信我无法询问最终用户…”我不得不处理安装起来要复杂得多的软件包。尤其是GNU编译器。如果我正确理解了您的问题,您可以通过以下方式自动化安装过程。