Я взял следующую демонстрацию в Интернете с https://computing.llnl.gov/tutorials/pthreads/
#include <pthread.h>
#include <stdio.h>
#define NUM_THREADS 5
void *PrintHello(void *threadid)
{
long tid;
tid = (long)threadid;
printf("Hello World! It's me, thread #%ld!\n", tid);
pthread_exit(NULL);
}
int main (int argc, char *argv[])
{
pthread_t threads[NUM_THREADS];
int rc;
long t;
for(t=0; t<NUM_THREADS; t++){
printf("In main: creating thread %ld\n", t);
rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);
if (rc){
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
}
pthread_exit(NULL);
}
Но когда я компилирую его на моей машине (под управлением Ubuntu Linux 9.04), я получаю следующую ошибку:
corey@ubuntu:~/demo$ gcc -o term term.c
term.c: In function ‘main’:
term.c:23: warning: incompatible implicit declaration of built-in function ‘exit’
/tmp/cc8BMzwx.o: In function `main':
term.c:(.text+0x82): undefined reference to `pthread_create'
collect2: ld returned 1 exit status
Это не имеет никакого смысла для меня, потому что заголовок включает pthread.h
, который должен иметь pthread_create
функцию. Есть идеи, что не так?
c
linux
multithreading
pthreads
Ральф
источник
источник
-lc_r
), (с)-thread
или-threads
или другой, вместо или в дополнение к-lpthread
.-lpthread
нужен во время компиляцииLDFLAGS= -pthread -lpthread
Ответы:
Оба ответа на этот вопрос пока неверны .
Для Linux правильная команда:
В общем, библиотеки должны следовать источникам и объектам в командной строке, и
-lpthread
это не «опция», это спецификация библиотеки. В системе только сlibpthread.a
установленным,не сможет связать.
источник
gcc term.c -lpthread
undefined reference to 'pthread_cancel'
иundefined reference to 'pthread_create'
ошибки. Я наткнулся на этот пост и подумал, что попробую ответ «Занятого русского» Я открылmakesnortsam.sh
в VI и:%s/lpthread/pthread/g
выполнил команду, чтобы заменить lpthread на pthread, чтобы он использовался-pthread
вместо-lpthread
компиляции. Я был тогда в состоянии собрать snortsam. Спасибо занятым русским!-pthread
в Параметры сборки проекта -> Настройки компоновщика -> Другие опции компоновщика.в затмении
properties-> c / c ++ Build-> setting-> GCC C ++ linker-> библиотеки в верхней части добавляют "pthread"
источник
Запустив из терминала Linux, я скомпилировал с помощью следующей команды (предположим, файл c, который я хочу скомпилировать, называется test.c):
Надеюсь, это кому-нибудь поможет!
источник
Для Linux правильная команда:
источник
На самом деле, он дает несколько примеров команд компиляции, используемых для кодов pthreads, перечисленных в таблице ниже, если вы продолжите читать следующий учебник:
https://computing.llnl.gov/tutorials/pthreads/#Compiling
источник
Если вы используете cmake, вы можете использовать:
Или
источник
Скомпилируйте это так: gcc demo.c -o demo -pthread
источник
Я считаю , что правильный способ добавления
pthread
вCMake
это со следующимисточник
В Visual Studio 2019 укажите
-pthread
на страницах свойств проекта:Введите в
-pthread
текстовое поле.источник
Вам нужно использовать опцию
-lpthread
с gcc.источник
-lpthread
это не «опция», она указывает библиотеку.вам нужно только добавить "pthread" в свойствах => C / C ++ build => GCC C ++ Linker => Libraries => верхняя часть "Библиотеки (-l)". это оно
источник
проверьте страницу руководства, и вы получите.
Компилировать и связывать с -pthread.
источник
В Anjuta перейдите в меню Build, затем настройте проект. В окне «Настройка параметров» добавьте:
Надеюсь, это кому-нибудь тоже поможет ...
источник
Иногда, если вы используете несколько библиотек, проверьте зависимость библиотеки. (например, -lpthread -lSDL ... <==> ... -lSDL -lpthread)
источник