неизвестное имя типа "pthread_barrier_t" - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь распараллелить алгоритм в C. Я хочу использовать pthread_barrier_t, но мой Ubuntu wsl по какой-то причине не может его найти. У меня включено pthread.h, и я могу использовать остальные функции pthread. libthread.a установлен.

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

/* Error occurs here */
pthread_barrier_t barrier;

Точная ошибка: «идентификатор pthread_barrier_t не определен»

Я видел в другом месте, что это может быть способ компиляции.

Компиляция следующим образом:

gcc -o test test.c -Wall -std=c99 -lpthread -lm

Кроме того, VS Code не может идентифицировать функцию.

1 Ответ

3 голосов
/ 07 мая 2020

Проблема в вашем варианте -std=c99. Использование режима strict C отключает кучу вещей, в том числе то, что мешает определению pthread_barrier_t. Если вместо этого вы используете -std=gnu99, он должен скомпилироваться. (Проверено на Ubuntu 16.04 на WSL).

В качестве альтернативы добавьте

#define _XOPEN_SOURCE 600 /* Or higher */

или

#define _POSIX_C_SOURCE 200112L /* Or higher */

перед первым #include в ваш источник. См. man 7 feature_test_macros для допустимых значений этих макросов и дополнительной информации.

...