GCC 编译:文件末尾生成格式错误的 ASM
GCC compilation : malformed generated ASM at the end of the file
在 Linux Fedora 上使用 GLib 在个人 C11 项目上使用 Meson build 和 GCC,我在编译时随机出现以下错误:
movie.s: Assembler messages:
movie.s:6916: Error: no such instruction: `te.gnu-stack,"",@progbits'
ninja: build stopped: subcommand failed.
检查错误文件后,生成的ASM结尾格式错误(最后一条指令看起来复制错误?)
版本不正确:
.LASF52:
.string "GClassInitFunc"
.ident "GCC: (GNU) 10.3.1 20210422 (Red Hat 10.3.1-1)"
.section .note.GNU-stack,"",@progbits
te.GNU-stack,"",@progbits
正确版本:
.LASF52:
.string "GClassInitFunc"
.ident "GCC: (GNU) 10.3.1 20210422 (Red Hat 10.3.1-1)"
.section .note.GNU-stack,"",@progbits
如您在故障 ASM 的最后一行所见,附加了此输出行:
te.GNU-stack,"",@progbits
当这个错误发生时,我基本上重新启动编译过程,有时它只是 'magically' 工作(没有对任何文件进行任何修改)。
我的编译器版本:
- Linux Fedora 发行版 33(三十三)
- (GCC) 10.3.1 20210422(红帽 10.3.1-1)(2021 年 4 月 8 日)
- meson --buildtype=debug:没有优化
有人知道是什么原因造成的吗?
编辑:
解决问题:在 Meson Github 上发布问题:github.com/mesonbuild/meson/issues/8862 ;造成伤害的是“save-temps”,因为 ninja 使用并行编译导致中间文件同时被覆盖。您可以禁用“-save-temps”或使用“-j1”选项来限制一个进程
总结:使用公共源文件构建多个 objects/executable 时,save-temps 不是完全并行安全的。
介子在这里建造;基本上我有两个带有共享源的“可执行”目标,由于某种原因,第一个似乎与第二个重叠,尽管它应该是顺序的。
示例:
executable('app',
sources: [
'main.c',
'movie.c',
],
dependencies: [depglib, depgtk, deplibcurl],
)
executable('convert',
sources: [
'convert.c',
'movie.c',
],
dependencies: [depglib, depgio],
)
此答案建议链接共享库:;我会试试的!
谢谢!
在 Linux Fedora 上使用 GLib 在个人 C11 项目上使用 Meson build 和 GCC,我在编译时随机出现以下错误:
movie.s: Assembler messages:
movie.s:6916: Error: no such instruction: `te.gnu-stack,"",@progbits'
ninja: build stopped: subcommand failed.
检查错误文件后,生成的ASM结尾格式错误(最后一条指令看起来复制错误?)
版本不正确:
.LASF52:
.string "GClassInitFunc"
.ident "GCC: (GNU) 10.3.1 20210422 (Red Hat 10.3.1-1)"
.section .note.GNU-stack,"",@progbits
te.GNU-stack,"",@progbits
正确版本:
.LASF52:
.string "GClassInitFunc"
.ident "GCC: (GNU) 10.3.1 20210422 (Red Hat 10.3.1-1)"
.section .note.GNU-stack,"",@progbits
如您在故障 ASM 的最后一行所见,附加了此输出行:
te.GNU-stack,"",@progbits
当这个错误发生时,我基本上重新启动编译过程,有时它只是 'magically' 工作(没有对任何文件进行任何修改)。
我的编译器版本:
- Linux Fedora 发行版 33(三十三)
- (GCC) 10.3.1 20210422(红帽 10.3.1-1)(2021 年 4 月 8 日)
- meson --buildtype=debug:没有优化
有人知道是什么原因造成的吗?
编辑:
解决问题:在 Meson Github 上发布问题:github.com/mesonbuild/meson/issues/8862 ;造成伤害的是“save-temps”,因为 ninja 使用并行编译导致中间文件同时被覆盖。您可以禁用“-save-temps”或使用“-j1”选项来限制一个进程
总结:使用公共源文件构建多个 objects/executable 时,save-temps 不是完全并行安全的。
介子在这里建造;基本上我有两个带有共享源的“可执行”目标,由于某种原因,第一个似乎与第二个重叠,尽管它应该是顺序的。
示例:
executable('app',
sources: [
'main.c',
'movie.c',
],
dependencies: [depglib, depgtk, deplibcurl],
)
executable('convert',
sources: [
'convert.c',
'movie.c',
],
dependencies: [depglib, depgio],
)
此答案建议链接共享库:
谢谢!