我正在尝试使用 NASM 0.98.39 编译此源代码(已精简到最低限度):
common foo 2:near
mov word [bx], foo
dummy:
意外地,我收到错误消息:
$ nasm-0.98.39 -O9 -f obj -o tt.obj tt.nasm tt.nasm:1: error: symbol `foo' redefined
较新版本的 NASM(例如 2.13.02)成功。
有没有办法让它与 NASM 0.98.39 一起工作?
请注意,对于生产项目,升级 NASM 不是一个选项,因为较新的版本在某些特殊情况下会生成不同的机器代码。
请注意,将优化标志从 -O9
更改为 -O0
可以使其成功,但这不是生产项目的选项。
最佳答案
Is there a way to make it work with NASM 0.98.39?
不,没有。
当然,您可以升级 nasm
和
- 尝试解决优化中不需要的偏差(插入
严格
),或 - 只需以
db
表示法转储所需的机器代码即可。
Yes, I'd be happy with a workaround.
OMF 是一种相当简单的数据格式。
您可以在不到一小时的时间内阅读所有必要的文档,并在一天内编写补丁程序。
然后,您将在 nasm
源代码中使用 extern
代替 common
,您的补丁程序将修复此问题。
关于assembly - 在古代 NASM 版本 (0.98.39) 中,常见符号报告为 'redefined',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75300794/