我已经实现了一个相当不错的优化编译器(用于玩具语言),并且遇到了一个相当令人费解的场景。我可以从中获取输入文件并生成汇编,因此在这方面“编译器”已完成。如果我把那个汇编文件用NASM汇总并用G ++将它链接到我的运行时支持库(运行时需要libstdc ++),我得到一个可用的可执行文件,没有错误。但是,我希望能够在一个命令中编译成可执行文件,所以我向system
添加了一些对我的编译器的调用,并传递了我在bash中使用的EXACT SAME COMMANDS。当我运行编译器时,它似乎正确组装,但链接步骤(再次,使用g ++)失败了undefined reference to main
。困惑,我试图手动链接(没有重新组装,所以我使用由system
运行的NASM生成的目标文件,并收到相同的错误。如果我使用新编译器的汇编输出重新组装,我没有问题这让我们相信NASM就是问题所在。就像我说的那样,命令是完全一样的(我只是复制并粘贴它们只是为了确保在第一次之后)。这是环境变量还是什么?发生了什么? ?
编辑: 我手动组装了一个目标文件,再次使用与编译器中的命令相同的命令,我在两者之间做了一个vim diff。编译器生成的似乎只包含ELF头。
编辑2: 差异
的屏幕截图编辑3:
我尝试使用system
来调用Perl脚本,而后者又会调用NASM和G ++,但仍然没有运气。
答案 0 :(得分:1)
修正了它!由于竞争条件,文件没有被刷新。感谢所有的帮助,非常感谢。