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"
我试图在 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"