LDFLAGS是選項(xiàng),LIBS是要鏈接的庫(kù)。都是喂給ld的,只不過(guò)一個(gè)是告訴ld怎么吃,一個(gè)是告訴ld要吃什么。
網(wǎng)上不難搜索到上面這段話。不過(guò)“告訴ld怎么吃”是什么意思呢?
看看如下選項(xiàng):
LDFLAGS = -L/var/xxx/lib -L/opt/mysql/lib
LIBS = -lmysqlclient -liconv
這就明白了。LDFLAGS告訴鏈接器從哪里尋找?guī)煳募琇IBS告訴鏈接器要鏈接哪些庫(kù)文件。不過(guò)使用時(shí)鏈接階段這兩個(gè)參數(shù)都會(huì)加上,所以你即使將這兩個(gè)的值互換,也沒(méi)有問(wèn)題。
說(shuō)到這里,進(jìn)一步說(shuō)說(shuō)LDFLAGS指定-L雖然能讓鏈接器找到庫(kù)進(jìn)行鏈接,但是運(yùn)行時(shí)鏈接器卻找不到這個(gè)庫(kù),如果要讓軟件運(yùn)行時(shí)庫(kù)文件的路徑也得到擴(kuò)展,那么我們需要增加這兩個(gè)庫(kù)給"-Wl,R"
LDFLAGS = -L/var/xxx/lib -L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib
如 果在執(zhí)行./configure以前設(shè)置環(huán)境變量export LDFLAGS="-L/var/xxx/lib -L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib" ,注意設(shè)置環(huán)境變量等號(hào)兩邊不可以有空格,而且要加上引號(hào)哦(shell的用法)。那么執(zhí)行configure以后,Makefile將會(huì)設(shè)置這個(gè)選項(xiàng), 鏈接時(shí)會(huì)有這個(gè)參數(shù),編譯出來(lái)的可執(zhí)行程序的庫(kù)文件搜索路徑就得到擴(kuò)展了。
------------------------------------------------------------------------------------------------------------------------
PS:-Wl,R在GraphicsMagick環(huán)境下,用為-R, 也就是LDFLAGS = -L/var/xxx/lib -R/var/xxx/lib
CPPFLAGS='-I/usr/local/libjpeg/include -I/usr/local/libpng/include'