我想學習C編程使用Zed Shaw的學習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似乎並沒有因爲當我用「$讓devpkg」不是所有的APR庫函數是工作聲明。作爲一個附註我正在Ubuntu虛擬機上運行這個。文中給出的解決方案說改變一個配置文件,然後「運行ldconfig」來幫助鏈接器找到合適的庫。
我不明白ldconfig的手冊頁足以正確使用該功能。如何正確運行ldconfig?
也經過一些挖掘,我發現在生成文件中使用「LDLIBS」而不是「LDFLAGS」的引用解決了問題。我修改了makefile和編譯的程序。
允許C編譯器正確鏈接到APR庫的「LDFLAGS」和「LDLIBS」有什麼區別?是否有一些方便的命令列表可以幫助我更好地理解makefile是如何正確生成的?
謝謝你的時間。
你確定應該是'/ user/local'而不是'/ usr/local'嗎? – 2013-03-01 19:39:58
是的,你是對的。不過,我在這裏犯了錯字,它不在makefile中。 – user2073935 2013-03-02 01:59:03