Функция потока в отдельном файле с pthread и make - PullRequest
0 голосов
/ 29 мая 2018

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

1 Ответ

0 голосов
/ 29 мая 2018

статические функции являются локальными для модуля и невидимы для других модулей компиляции.Удалите static из его определения и объявления.

...