我想创建一个支持 posix 信号量的 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 $@

include depends

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

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

出于某种原因,对于 semaphore.h api 函数的所有调用,我都收到了“ undefined reference ”。

最佳答案

您需要链接 rtpthread 库。从 man sem_destroy 引用页面:



添加到编译器命令的末尾作为 order is important (不确定顺序对 -pthread 是否重要,因为它定义了一些宏并添加了 -lpthread )。

正如 Vlad Lazarenko 所评论的, LDFLAGS 不是您的 TARGET 的一部分。改成:

关于使用 pthread 创建 makefile,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15367617/

10-15 01:31