Skip to content

[Bug] 在基于 abstract-machine 编译部分 benchmark 时出现 undefined reference to main 及头文件类型冲突 #5

Description

@pseudonymzjt

运行环境

Ubuntu 24.04 LTS (x86_64), riscv64-linux-gnu-gcc, minirv-npc, Repository Commit (archbench) @ 52034e3, NJU-ProjectN/abstract-machine @ 9bc0a93

这是我运行和修改的记录
note.txt

这是YSYX讲义对应的位置(我的minirv-npc已通过基础测试)
E6 简易运行时环境

问题

1. 多个用例缺少 main 入口符号

000.hello, 102.queen, 103.dinic, 104.malloc, 106.qsort, 107.stream, 203.rsa 链接失败:

riscv64-linux-gnu-ld: am-minirv-npc.a(trm.o): in function `_trm_init':
trm.c:(.text._trm_init+0x10): undefined reference to `main'

这些用例未自带 main.c,需依赖 libbench/bench.c 中的 main()。但子项目 Makefile 未声明依赖 libbench,且 AM 默认去 $(AM_HOME)/libbench 检索依赖库,导致符号未参与链接。
我在hello.c对应的Makefile中添加了依赖声明,解决了hello找不到main的问题。

2. 系统 glibc 头文件与 AM klib.h 原型冲突

100.blockchain, 201.jpeg, 200.genann, 302.lua, 303.cproc 等编译失败:

/usr/riscv64-linux-gnu/include/string.h:152:14: note: previous declaration of ‘strncat’
/abstract-machine/klib/include/klib.h:21:8: error: conflicting types for ‘strncat’

3. 裸机 AM 环境下缺失 libc 扩展函数

101.igemm, 105.bf, 108.ntt 报 implicit declaration of function ‘calloc’
202.llama2, 300.bzip3 报 implicit declaration of function ‘isprint’ / ‘isspace’ / ‘isdigit’

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions