Файл Simple .c не удается скомпилировать pthreads.h

#c #multithreading

Вопрос:

Я давний любитель python, переносящий сценарий на c. Я считаю, что в среде что-то не так, что мешает компиляции кода. Исследования в других местах наводят меня на мысль, что это как-то связано с файлами заголовков posix? Может быть, что-то с макросами? У меня недостаточно опыта в c, чтобы понять это.

Соответствующий фрагмент находится здесь:

 pthread_t id;
thread_create(amp;id, NULL, refreshqb,NULL);
void *status;
pthread_start(id, (void**)amp;status);
 

Ошибка, которую я получаю, заключается в следующем.

 t.c:91:4: warning: implicit declaration of function 'thread_create' is invalid in C99
      [-Wimplicit-function-declaration]
   thread_create(amp;id, NULL, refreshqb,NULL);
   ^
t.c:93:4: warning: implicit declaration of function 'pthread_start' is invalid in C99
      [-Wimplicit-function-declaration]
   pthread_start(id, (void**)amp;status);
   ^
2 warnings generated.
Undefined symbols for architecture x86_64:
  "_pthread_start", referenced from:
      _main in t-0d3a02.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
 

Комментарии:

1. Вы уже указали pthreads.h , но, похоже, не используете его в своем файле C. Это немного сбивает с толку.

Ответ №1:

Поддержка pthreads должна быть явно включена при компиляции кода. Похоже, вы используете clang, поэтому просто добавьте -pthread флаг при компиляции с использованием clang.

Комментарии:

1. Спасибо. Я еще не пробовал этого. Итак, «файл cc -pthread.c». Тогда.

2. @пользователь2930324 да! Если это не решит вашу проблему, не стесняйтесь оставить еще один комментарий, и я смогу взглянуть еще раз

Ответ №2:

Пожалуйста, попробуйте использовать pthread_create, а также включите правильный заголовок библиотеки posix или «#include <pthread.h>».

Комментарии:

1. Я сделал. Исходный файл намного длиннее, чем я опубликовал. Я просто включил соответствующий фрагмент.