2013-03-12 51 views
1

我想創建一個支持posix信號量的makefile。 這就是我這麼遠:用pthread創建makefile

CFLAGS=-g -ansi -pedantic -Wall -Werror -D_XOPEN_SOURCE=600 
LDFLAGS=-pthread 
CC=gcc 
OBJECTS=MsgQueueMain.o MsgQueue.o Queue.o MyMalloc.o 
TARGET=MsgQueueMain 

all: $(TARGET) 

$(TARGET): $(OBJECTS) 
    $(CC) $(OBJECTS) -o [email protected] 

include depends 

depends: 
    $(CC) -MM $(OBJECTS:.o=.c) > depends 

clean: 
    rm ./$(TARGET) *.o 

出於某種原因,我得到「未定義的引用」爲所有呼叫semaphore.h中的API函數。

+1

這可能是不相關的prolem,但你編譯和鏈接時,需要'-pthread' ,所以你應該把它添加到'CFLAGS'中。 – Idelic 2013-03-12 20:39:49

回答

4

您需要鏈接rtpthread庫。從man sem_destroy參考頁:

鏈接與-lrt或-pthread。

添加到編譯器命令的作爲order is important結束(不確定如果訂單是-pthread重要的,因爲它定義了一些宏,並增加了-lpthread)。

正如Vlad LazarenkoLDFLAGS評論是你TARGET一部分。更改爲:

$(CC)$(對象)-o $ @ $(LDFLAGS)

+1

他的問題是'LDFLAGS'沒有在他的'$(TARGET)'建築命令中指定,並且不是因爲他不知道'-pthread'是需要的... – 2013-03-12 17:13:38

+0

@VladLazarenko,很好的發現。我完全錯過了。 – hmjd 2013-03-12 17:14:38