【发布时间】:2013-03-01 19:26:46
【问题描述】:
我正在努力使用 Zed Shaw 的 Learn C 来学习 C 编程。我一直在研究 ex26,我们在其中创建了一个用于安装软件的程序“devpkg”。此练习需要安装 Apache Portable Runtime 库。编写完本练习的代码后,我无法使用以下 makefile 编译程序:
PREFIX?=/user/local
CFLAGS=-g -Wall -I${PREFIX}/apr/include/apr-1 -I{PREFIX}/apr/include/apr-util-1
LDFLAGS=-L${PREFIX}/apr/lib -lapr-1 -pthread -laprutil-1
all: devpkg
install: all
install -d${DESTDIR}/${PREFIX}/bin/
install devpkg ${DESTDIR}/${PREFIX}/bin/
clean:
rm -f *.o
rm -f devpkg
rm -f *.dSYM
这个 makefile 似乎没有工作,因为当我使用“$make devpkg”时,并不是所有的 APR 库函数都被声明了。作为旁注,我在 Ubuntu 虚拟机上运行它。文中给出的解决方案是更改配置文件,然后“运行 ldconfig”以帮助链接器找到合适的库。
我不太了解 ldconfig 的手册页,无法正确使用该功能。如何正确运行 ldconfig?
另外,经过一番挖掘,我发现在 makefile 中使用“LDLIBS”而不是“LDFLAGS”解决了这个问题。我更改了makefile并编译了程序。
允许 C 编译器正确链接到 APR 库的“LDFLAGS”和“LDLIBS”有什么区别?是否有方便的命令列表可以帮助我更好地了解如何正确生成 makefile?
感谢您的宝贵时间。
【问题讨论】:
-
你确定应该是
/user/local而不是/usr/local? -
是的,你是对的。但是我在这里打错了,它不在makefile中。
标签: makefile