2014-02-27 30 views
1

好像我在與並行線程的問題時,我嘗試用一​​個Makefile編譯:問題與並行線程compling

/csapp.c:462: undefined reference to `pthread_create' 

我想可能有一些做與-lpthread? 這裏是我的Makefile(是的,他們是標籤一次):

CC = gcc 
CFLAGS = -Wall -g 
LDFLAGS = -lpthread 

OBJS = proxy.o csapp.o 

all: proxy 

proxy: $(OBJS) 

csapp.o: csapp.c 
    $(CC) $(CFLAGS) -c csapp.c 

proxy.o: proxy.c 
    $(CC) $(CFLAGS) -c proxy.c 
clean: 
    rm -f *~ *.o proxy 
+0

你看到'ld'命令行中,當你'make'去?我假設'-lpthread'實際上並沒有進入'ld'。 –

+0

我得到'GCC -lpthread proxy.o csapp.o -o代理 csapp.o:在函數 '在pthread_create':' – Space

+0

爲什麼'Pthread_create'資本? –

回答

3

我相信你的問題是與LDFLAGS

10.3 Variables Used by Implicit Rules

LDFLAGS額外的標誌來給編譯器時,他們都應該調用鏈接,ld,如-L。庫(-lfoo)應該被添加到LDLIBS變量代替。

LDLIBS當編譯器應該調用鏈接程序時給予編譯器的庫標誌或名稱,ldLOADLIBES被棄用(但仍支持)替代LDLIBS。非庫連接標誌,如-L,應該在LDFLAGS變量。

所以嘗試:

LDLIBS = -lpthread 
+0

是啊這工作,謝謝! – Space