gpt4 book ai didi

c++ - 使用 system() 从 C 程序调用 NASM 会生成不同的目标代码,然后使用 Bash 调用

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:30:40 24 4
gpt4 key购买 nike

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

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

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

编辑 3:我尝试使用 system 调用一个 Perl 脚本,该脚本又会调用 NASM 和 G++,但仍然没有成功。

最佳答案

修复了!这是由于竞争条件而未刷新的文件。感谢您提供的所有帮助,非常感谢。

关于c++ - 使用 system() 从 C 程序调用 NASM 会生成不同的目标代码,然后使用 Bash 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12761755/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com