【发布时间】:2012-03-04 17:39:54
【问题描述】:
我对 C 和 makefile 还很陌生,因此并不完全了解其内部工作原理。作为学校的一项任务,我被告知要做一个拼写检查器,实现三种不同的方式。我们得到了一组模板文件供我们使用。
在主文件(spell-checker.c)中,我包含了hash.h。这个文件给了我一些函数原型。
我现在有一些源文件——我们称它们为hash-glib.c 和hash-chain.c。第一个文件使用 glib,因此需要包含该库(因此是 pkg-config 的东西)。我可以使用以下 makefile 函数编译和运行hash-glib.c:
%.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
【问题讨论】:
-
好的,这并不是真正的 makefile 问题。为了解决这个问题,我建议手动找出正确的
gcc咒语(即通过在命令行中输入它们)。一旦你解决了这个问题,根据需要调整 makefile。 -
经过一番摆弄,我设法解决了追溯我的步骤的问题。谢谢。