Я изучаю конструкцию компилятора по книге Современная реализация компилятора в C .Во введении есть «ПРОГРАММНЫЙ ПРОГРАММНЫЙ ИНТЕРПРЕТАТОР ПРЯМОЙ ЛИНИИ», который, как он сказал, «доступен в каталоге $TIGER/chap1
», поэтому я скачал компилятор TIGER с https://www.cs.princeton.edu/~appel/modern/c/project.html.
В chap1
каталог, там есть несколько файлов:
chap1$ ls
1.png makefile prog1.h slp.h util.h
main.c prog1.c slp.c util.c
Итак, я выполняю команду make в каталоге 'chap1', но выдает ошибку:
chap1$ make
cc -g -c main.c
cc -g -c prog1.c
cc -g -c slp.c
cc -g -c util.c
cc -g main.o prog1.o slp.o util.o
Undefined symbols for architecture x86_64:
"_main", referenced from:
implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [a.out] Error 1
Вот это makefile
:
a.out: main.o prog1.o slp.o util.o
cc -g main.o prog1.o slp.o util.o
main.o: main.c slp.h util.h
cc -g -c main.c
prog1.o: prog1.c slp.h util.h
cc -g -c prog1.c
slp.o: slp.c slp.h util.h
cc -g -c slp.c
util.o: util.c util.h
cc -g -c util.c
clean:
rm -f a.out util.o prog1.o slp.o main.o
Кажется, каталог chap1
является полным проектом, но я не знаю, какова функция каталога chap1
в компиляторе TIGER и как его использовать.