2

我已经实现了一个相当好的优化编译器(对于一种玩具语言),并且遇到了一个相当令人费解的场景。我可以获取一个输入文件并从中生成程序集,因此在这方面“编译器”已经完成。如果我将该汇编文件与 NASM 进行汇编并使用 G++ 将其链接到我的运行时支持库(运行时需要 libstdc++),我将得到一个可以正常工作的可执行文件,并且没有错误。但是,我希望能够在一个命令中编译为可执行文件,因此我向system编译器添加了一些调用,传递与我在 bash 中使用的完全相同的命令。当我运行编译器时,它似乎可以正确组装,但是链接步骤(再次使用 g++)失败并显示undefined reference to main. 困惑,我试图手动链接(不重新组装,system,并收到相同的错误。如果我使用新编译器的汇编输出重新组装,我没有问题,这导致人们相信 NASM 是问题所在。就像我说的,命令是完全一样的(我复制并粘贴它们只是为了确保在第一次之后)。这是环境变量还是什么?这是怎么回事?

编辑:我手动组装了一个目标文件,再次使用与编译器中的命令相同的命令,并在两者之间进行了 vim diff。编译器生成的似乎只包含 ELF 标头。

编辑 2:差异的屏幕截图截屏

编辑 3:我尝试使用system调用 Perl 脚本,然后调用 NASM 和 G++,仍然没有运气。

4

1 回答 1

1

解决它!这是由于竞争条件而没有刷新文件。感谢所有的帮助,非常感谢。

于 2012-10-06T17:53:09.407 回答