当线程函数作为参数传递在单独的文件中时,使用pthread_create()
创建线程时,以下代码存在问题。当在同一个文件中时,它可以正常工作。
我有Main.c
,ThreadFunction.h
,ThreadFunction.c
和一台makefile
。我猜问题出在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
发布于 2018-05-30 01:24:26
静态函数是模块本地的,对其他编译单元不可见。将static
从其定义和声明中删除。
https://stackoverflow.com/questions/50589745
复制相似问题