C 链接器抱怨MINIX3.2.1下的引用未定义

C 链接器抱怨MINIX3.2.1下的引用未定义,c,makefile,operating-system,kernel,minix,C,Makefile,Operating System,Kernel,Minix,正如您所想象的,这是操作系统的一个家庭作业,我被要求添加功能键Shift+F7以显示正在运行的进程的数量 我阅读了(MINIX 3.2.1版)上的commandps的源代码,并尝试实现一个可以在文件/usr/src/servers/is/dmp\u kernel.c中完成任务的函数。但是,当我尝试运行make时,它会抱怨未定义的引用,如 dmp_kernel.o: In function `running_proc_num': dmp_kernel.c:(.text+0x1e): undefin

正如您所想象的,这是操作系统的一个家庭作业,我被要求添加功能键Shift+F7以显示正在运行的进程的数量

我阅读了(MINIX 3.2.1版)上的command
ps
的源代码,并尝试实现一个可以在文件
/usr/src/servers/is/dmp\u kernel.c
中完成任务的函数。但是,当我尝试运行
make
时,它会抱怨未定义的引用,如

dmp_kernel.o: In function `running_proc_num':
dmp_kernel.c:(.text+0x1e): undefined reference to `chdir'
dmp_kernel.c:(.text+0x42): undefined reference to `fopen'
dmp_kernel.c:(.text+0x72): undefined reference to `fscanf'
dmp_kernel.c:(.text+0x8b): undefined reference to `fclose'
dmp_kernel.c:(.text+0xc4): undefined reference to `log10'
dmp_kernel.c:(.text+0xcc): undefined reference to `ceil'
dmp_kernel.c:(.text+0x119): undefined reference to `log10'
dmp_kernel.c:(.text+0x121): undefined reference to `ceil'
dmp_kernel.c:(.text+0x170): undefined reference to `fopen'
dmp_kernel.c:(.text+0x1bc): undefined reference to `fscanf'
dmp_kernel.c:(.text+0x1d3): undefined reference to `fclose'
dmp_kernel.c:(.text+0x210): undefined reference to `wait'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我已经包含了像
stdio.h
math.h
unistd.h
sys/wait.h
这样的标题。在to-one堆栈溢出问题中,我了解到这个问题的原因是链接器没有在MINIX下链接完整的C库。然而,我通常使用
CMake
,真的不知道如何解决这个问题。我甚至不知道如何使用
make
来“显式”链接函数

我真的很期待你的帮助


Makefile
看起来像


.include <bsd.own.mk>

PROG=   is
SRCS=   main.c dmp.c dmp_kernel.c dmp_pm.c dmp_fs.c dmp_rs.c dmp_ds.c dmp_vm.c

DPADD+= ${LIBSYS}
LDADD+= -lsys

MAN=

BINDIR?= /sbin

CPPFLAGS.dmp_kernel.c+= -I${NETBSDSRCDIR}
CPPFLAGS.dmp_rs.c+=     -I${NETBSDSRCDIR}
CPPFLAGS.dmp_vm.c+=     -I${NETBSDSRCDIR}

# This setting must match the kernel's, as it affects the IRQ hooks table size.
.if ${USE_APIC} != "no"
CFLAGS+= -DUSE_APIC
.endif

.include <minix.service.mk>

.包括
PROG=is
SRCS=main.cdmp.cdmp_kernel.cdmp_pm.cdmp_fs.cdmp_rs.cdmp_ds.cdmp_vm.c
DPADD+=${LIBSYS}
LDADD+=-lsys
人=
BINDIR?=/sbin
CPPFLAGS.dmp_kernel.c+=-I${netbsdssrcdir}
CPPFLAGS.dmp_rs.c+=-I${netbsdssrcdir}
CPPFLAGS.dmp_vm.c+=-I${netbsdssrcdir}
#此设置必须与内核的匹配,因为它会影响IRQ钩子表的大小。
.if${USE_APIC}!=“没有”
CFLAGS+=-DUSE_APIC
.endif
.包括

这可能是Makefile问题,因此您需要查看Makefile-l通常用于链接库。您需要找出哪个库包含缺少的函数。然后将其添加到库列表中。我使用了另一种方法来解决作业,但我仍然不知道如何通过makefile显式链接库。