Я довольно новичок в C и make-файлах и, таким образом, не полностью понимаю внутреннюю работу.В качестве задания для школы мне сказали сделать проверку орфографии, реализуя три различных способа.Нам дали набор файлов шаблонов для работы.
В основной файл (spell-checker.c
) я включаю hash.h
.Этот файл дает мне несколько прототипов функций.
Теперь у меня есть несколько исходных файлов - давайте назовем их hash-glib.c
и hash-chain.c
.Первый файл использует glib и поэтому должен включать эту библиотеку (отсюда и материал pkg-config).Мне удается скомпилировать и запустить hash-glib.c
, используя следующие функции makefile:
%.o: %.c
gcc $(CFLAGS) $< -c -o $@
hash-glib.o: hash-glib.c
gcc $< -c `pkg-config --cflags glib-2.0` $(CFLAGS)
libhash-glib.a: hash-glib.o
ar rcs libhash-glib.a $<
spell-checker-glib: spell-checker.c libhash-glib.a
gcc spell-checker.c -L. \
-lhash-glib `pkg-config --cflags --libs glib-2.0` $(CFLAGS) -o $@
Я попытался добавить следующее, чтобы получить желаемый результат (безрезультатно):
libhash-chaining.a: hash-chaining.o
ar rcs libhash-chaining.a $<
spell-checker-chaining: spell-checker.c libhash-glib.a
gcc spell-checker.c -o $@ $(CFLAGS)
Что мне здесь не хватает?(и для дальнейшего использования - какие ключевые слова я мог бы изучить?)
Большое спасибо!
РЕДАКТИРОВАТЬ: Это вывод:
$ make spell-checker-glib
gcc hash-glib.c -c `pkg-config --cflags glib-2.0` -std=c99 -Wall -Wextra -pedantic -O2
ar rcs libhash-glib.a hash-glib.o
gcc spell-checker.c -L. \
-lhash-glib `pkg-config --cflags --libs glib-2.0` -std=c99 -Wall -Wextra -pedantic -O2 -o spell-checker-glib
$ make spell-checker-chaining
gcc spell-checker.c -o spell-checker-chaining -std=c99 -Wall -Wextra -pedantic -O2
Undefined symbols for architecture x86_64:
"_hash_table_new", referenced from:
_main in ccGPxFvR.o
"_hash_table_insert", referenced from:
_main in ccGPxFvR.o
"_hash_table_fill", referenced from:
_main in ccGPxFvR.o
"_hash_table_size", referenced from:
_main in ccGPxFvR.o
"_hash_table_lookup", referenced from:
_main in ccGPxFvR.o
"_hash_table_destroy", referenced from:
_main in ccGPxFvR.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [spell-checker-chaining] Error 1