xv6 makefile 说对 __printf_chk 的未定义引用

xv6 makefile says undefined reference to __printf_chk

我试图在 xv6 中添加一个用户 space 程序,但是当我尝试编译它时出现错误:"/usr/include/bits/stdio2.h:104: undefined reference to __printf_chk"。有什么帮助吗? 我的用户程序:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/stat.h>
#include <sys/user.h>

int 
main(int argc, char *argv[])
{
    setbuf(stdout, NULL);
    for (int i = 1; i < argc; i++)
    {
         printf("Print in user space: %s\n", argv[0]);
    }
    exit(0);

    return 0;
}


您已经使用来自 glibc 的 host headers 编译了程序,但您正在尝试 link 使用 xv6 目标 个图书馆。那是行不通的。您需要使用适当的交叉编译器,并注意不要使用 -I 会引入宿主 headers 的选项或 -L 会引入宿主库的选项来污染它。

为了将来参考,我会回答不要包含普通的 C 头文件,你必须使用 xv6 库提供的头文件,如果你只包含普通的 C 头文件,你会得到一个错误,更具体地说,删除 C 头文件,如果你在 RISC-V 使用 #include "user/user.h"