首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用pthread和make在单独的文件中执行线程函数

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

Stack Overflow用户
提问于 2018-05-30 01:20:41
回答 1查看 625关注 0票数 1

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

我有Main.cThreadFunction.hThreadFunction.c和一台makefile。我猜问题出在makefile上,但我就是搞不清楚。

我的问题:

是不是因为ThreadFunction.o对象文件不是用-pthread制作的?如果这就是原因,你是怎么做的?或者是因为其他原因?

下面是导致我的问题的代码:

Main.c

代码语言:javascript
复制
#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

代码语言:javascript
复制
static void *ThreadFunction(void *arg);

ThreadFunction.c

代码语言:javascript
复制
#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);
}

生成文件

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2018-05-30 01:24:26

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50589745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档