2012-09-25 42 views
0

我通常在運行配置腳本來靜態鏈接生成的可執行文件時使用「--enable-static」選項。如何在makefile中指定靜態鏈接?

但是,現在我正在編譯g3data,它只帶有makefile(無配置文件)。我嘗試在makefile中添加「-bstatic」選項(「-static」選項在我的系統上不起作用:Mac OS X 10.6.8,請參閱here以獲得解釋),但編譯成功後我可以運行該程序,它不是靜態鏈接...

我該怎麼做才能在這樣的makefile中實現靜態鏈接?以下是我現在所擁有的:

CC=gcc 
CFLAGS=-Wall `pkg-config --cflags gtk+-2.0` -arch i386 -arch x86_64 -arch ppc -bstatic 
LIBS=`pkg-config --libs gtk+-2.0` 
LDFLAGS=-arch i386 -arch x86_64 -arch ppc -bstatic 
#bindir ?= /usr/bin 
#mandir ?= /usr/share/man 

.c.o: 
    $(CC) -c $(CFLAGS) $(CPPFLAGS) $< 

all: g3data 

g3data: main.o sort.o points.o drawing.o #g3data.1.gz 
    $(CC) $(CFLAGS) -o g3data main.o sort.o points.o drawing.o $(LIBS) -bstatic 
    strip g3data 

main.o: main.c main.h strings.h vardefs.h 

sort.o: sort.c main.h 

points.o: points.c main.h 

drawing.o: drawing.c main.h 

#g3data.1.gz: g3data.sgml 
# rm -f *.1 
# onsgmls g3data.sgml | sgmlspl /usr/share/sgml/docbook/utils-0.6.14/helpers/docbook2man-spec.pl 
# gzip g3data.1 

clean: 
    rm -f *.o g3data g3data.1.gz *~ manpage.* 

install: 
    install g3data $(bindir) 
    install g3data.1.gz $(mandir)/man1 

uninstall: 
    rm $(bindir)/g3data 
+2

通常gcc使用'-static'標誌進行靜態鏈接 - 我期望'-bstatic'給你一個未知的選項錯誤... –

+0

@ChrisDodd是的我從大多數消息來源注意到你應該使用「-static 「,但顯然對於OS X,您應該使用」-bstatic「。我已經在我的問題中添加了關於該信息的鏈接。 – hpy

+1

所以......你正試圖靜態鏈接到共享庫? – Beta

回答

2

假設-bstatic是你的連接正確的選擇,並假設你有必要的庫靜態版本的,我希望你需要把該選項的前列表$(LIBS),好像它就像是GNU鏈接器的-Bstatic選項那麼它隻影響之後列出的選項。