Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 平托的例子_Linux_Operating System_Pintos - Fatal编程技术网

Linux 平托的例子

Linux 平托的例子,linux,operating-system,pintos,Linux,Operating System,Pintos,我是Linux的新用户,正在尝试Pintos Project#02-用户程序。我只安装了Pintos,我试图通过“make”构建示例,但我发现以下错误: 7fcdfb62f000-7fcdfb631000 rw-p 00000000 00:00 0 7fcdfb631000-7fcdfb632000 r--p 00022000 08:07 4619 /lib/x86_64-linux-gnu/ld-2.17.so 7fcdfb632000-7fcdf

我是Linux的新用户,正在尝试Pintos Project#02-用户程序。我只安装了Pintos,我试图通过“make”构建示例,但我发现以下错误:

7fcdfb62f000-7fcdfb631000 rw-p 00000000 00:00 0 
7fcdfb631000-7fcdfb632000 r--p 00022000 08:07 4619                       /lib/x86_64-linux-gnu/ld-2.17.so
7fcdfb632000-7fcdfb634000 rw-p 00023000 08:07 4619                       /lib/x86_64-linux-gnu/ld-2.17.so
7fffa164a000-7fffa166b000 rw-p 00000000 00:00 0                          [stack]
7fffa16ed000-7fffa16ef000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
../Makefile.userprog:42: recipe for target 'libc.a' failed
make: *** [libc.a] Aborted (core dumped)
make: *** Deleting file 'libc.a'
谁能解释一下发生了什么事

以下是Makefile.userprog供参考:

# -*- makefile -*-

$(PROGS): CPPFLAGS += -I$(SRCDIR)/lib/user -I.

# Linker flags.
$(PROGS): LDFLAGS += -nostdlib -static -Wl,-T,$(LDSCRIPT)
$(PROGS): LDSCRIPT = $(SRCDIR)/lib/user/user.lds

# Library code shared between kernel and user programs.
lib_SRC  = lib/debug.c          # Debug code.
lib_SRC += lib/random.c         # Pseudo-random numbers.
lib_SRC += lib/stdio.c          # I/O library.
lib_SRC += lib/stdlib.c         # Utility functions.
lib_SRC += lib/string.c         # String functions.
lib_SRC += lib/arithmetic.c     # 64-bit arithmetic for GCC.
lib_SRC += lib/ustar.c          # Unix standard tar format utilities.
exm_SRC += example/halt.c       # changes done
# User level only library code.
lib/user_SRC  = lib/user/debug.c    # Debug helpers.
lib/user_SRC += lib/user/syscall.c  # System calls.
lib/user_SRC += lib/user/console.c  # Console code.

LIB_OBJ = $(patsubst %.c,%.o,$(patsubst %.S,%.o,$(lib_SRC) $(lib/user_SRC)))
LIB_DEP = $(patsubst %.o,%.d,$(LIB_OBJ))
LIB = lib/user/entry.o libc.a

PROGS_SRC = $(foreach prog,$(PROGS),$($(prog)_SRC))
PROGS_OBJ = $(patsubst %.c,%.o,$(patsubst %.S,%.o,$(PROGS_SRC)))
PROGS_DEP = $(patsubst %.o,%.d,$(PROGS_OBJ))

all: $(PROGS)

define TEMPLATE
$(1)_OBJ = $(patsubst %.c,%.o,$(patsubst %.S,%.o,$($(1)_SRC)))
$(1): $$($(1)_OBJ) $$(LIB) $$(LDSCRIPT)
    $$(CC) $$(LDFLAGS) $$($(1)_OBJ) $$(LIB) -o $$@
endef

$(foreach prog,$(PROGS),$(eval $(call TEMPLATE,$(prog))))

libc.a: $(LIB_OBJ)
    rm -f $@ # LINE 42
    ar r $@ $^
    ranlib $@

clean::
    rm -f $(PROGS) $(PROGS_OBJ) $(PROGS_DEP)
    rm -f $(LIB_DEP) $(LIB_OBJ) lib/user/entry.[do] libc.a 

.PHONY: all clean

-include $(LIB_DEP) $(PROGS_DEP)

你可能从某个地方复制粘贴了你的makefile,把它搞砸了。要执行的命令前面的空格必须是一个或多个制表符,不能使用空格。

是否填充了所有的LIB_SRC文件?编译是否正常?是的,它们都已填充。下一步,您是否尝试手动发出
ar
命令?结果是什么?对不起,我真的不知道该怎么做,也不知道为什么要这么做。你能解释一下吗?感谢您的帮助。发出以下命令:
ar r libc.a lib/debug.o lib/random.o…
用所有lib\u SRC条目替换
,将它们修改为.o扩展名。这将帮助您定位错误。谢谢,但我下载了一个全新的pintos tarball,并用新的Makefile替换了我的Makefile。还是有同样的错误。嗯,我自己试过了,没问题。核心转储很奇怪,没有理由在makefile中可见。src/threads中的第一个make成功了吗?你能把错误前的5行也贴出来,告诉我们make想做什么吗?如果手动尝试执行make希望执行的最后一个程序,会发生什么情况?谢谢。src/threads中的make成功了。即使Pinto也能运行多种报警功能。我会在原始帖子中添加前几行。谢谢大家。我通过从头重新安装来消除错误。