线程函数在单独的文件中使用pthread和make

时间:2018-05-29 17:20:41

标签: c gcc makefile pthreads

当线程函数作为参数传递时,使用pthread_create()创建线程时,下面的代码存在问题,该文件位于单独的文件中。它在同一个文件中工作正常。

我有Main.cThreadFunction.hThreadFunction.cmakefile。我猜这个问题出在makefile,但我无法弄清楚。

我的问题:

是不是因为ThreadFunction.o目标文件不是用-pthread制作的?如果这就是原因,你怎么做?或者是因为别的什么?

以下是创建我的问题的代码:

MAIN.C

#include <stdio.h>
#include <pthread.h>
#include "ThreadFunction.h"

int main(int argc, char * argv[]) 
{
    pthread_t tid;
    int err;
    void *res;
    err = pthread_create(&tid, NULL, &ThreadFunction, "Argument from main");
    err = pthread_join(tid, &res);
    return 0;
}

ThreadFunction.h

static void *ThreadFunction(void *arg);

ThreadFunction.c

#include "ThreadFunction.h"
#include <stdio.h>
#include <pthread.h>

static void *ThreadFunction(void *arg)
{
    pthread_t id = pthread_self();
    printf("From thread: %s\n", (char *)arg);
    printf("Thread ID: %ld\n", id);
}

生成文件

LINK_TARGET = test.exe
OBJS = Main.o ThreadFunction.o
REBUILDABLES = $(OBJS) $(LINK_TARGET)
LIBS = -pthread

clean:
    rm -f $(REBUILDABLES)
    echo Clean done

all: $(LINK_TARGET)
    echo All done

$(LINK_TARGET) : $(OBJS)
    gcc -g -o $@ $^ $(LIBS)

$.o : $.cpp
    gcc -g -o $@ -c $<

Main.o : ThreadFunction.h
ThreadFunction.o : ThreadFunction.h

1 个答案:

答案 0 :(得分:2)

静态函数是模块本地的,对其他编译单元不可见。从其定义和声明中删除static