Существует проблема с кодом ниже при создании потока с 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);
}
Makefile
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