Вопрос по undefined-reference, c – получение ошибки в программе c «неопределенной ссылкой на gettid»

11

Это моя тема подпрограммы ... Здесь я создаю 4 потока и передаю структуру в качестве аргумента подпрограмме потока.

Я пытаюсь распечатать идентификатор потока сgetid() функция,

Я получаю сообщение об ошибке "неопределенная ссылка на gettid () ".

Я добавил необходимые заголовочные файлы ...

#include 
#include 
#include 
#define ARRAYSIZE 17
#define NUMTHREADS 4

struct ThreadData {
        int start, stop;
        int* array; 
};

void* squarer(void* td) 
{
     struct ThreadData* data=(struct ThreadData*) td;

     int start=data->start;
     int stop=data->stop;
     int* array=data->array;
     int i;
     pid_t tid1;

     tid1 = gettid(); //error at this statement//`
     printf("tid : %d\n",tid1);

     for (i=start; i
Если вы используете libc,gettid() не реализовано. Вы должны создать это самостоятельно user1781290
@ user1781290 Спасибо за ответ ....! как реализовать функцию gettid PravinY
Никогда не пробовал сам. Но по ссылке ниже, вы можете просто(long int)syscall(224), Может быть, это поможет вамubuntuforums.org/showthread.php?t=345317 user1781290
@ user1781290 спасибо за информацию, я проверил файл syscall.h и заменил идентификатор функции syscall gettid наsys_gettid вместо использования224/186, теперь утверждениеtid1 = системный вызов (SYS_gettid) ;. PravinY

Ваш Ответ

2   ответа
21

#include <unistd.h>
#include <sys syscall.h="">

#ifdef SYS_gettid
pid_t tid = syscall(SYS_gettid);
#else
#error "SYS_gettid unavailable on this system"
#endif
</sys></unistd.h>
Спасибо @ Сергей, это сработало! SRG
1

Я следовал предложениям, представленным на errro, и исправил источник *ниже код без ошибок *

#include <pthread.h>
#include <stdio.h>
#include <sys types.h="">
#include <unistd.h>
#include <sys syscall.h="">

#define ARRAYSIZE 17
#define NUMTHREADS 4

struct ThreadData {
    int start, stop;
    int* array; 
};

void* squarer(void* td) 
{
 struct ThreadData* data=(struct ThreadData*) td;

 int start=data->start;
 int stop=data->stop;
 int* array=data->array;
 int i;
 pid_t tid1;

 tid1 = syscall(SYS_gettid); // here is the correct statement //
 printf("tid : %d\n",tid1);

 for (i=start; i<stop; i++)="" {="" sleep(1);="" array[i]="i*i;" printf("arr[%d]="[%d]\n",i,array[i]);" }="" return="" null;="" int="" main(void)="" array[arraysize];="" pthread_t="" thread[numthreads];="" struct="" threaddata="" data[numthreads];="" i;="" tasksperthread="(ARRAYSIZE+NUMTHREADS-1)/NUMTHREADS;" for="" (i="0;" i<numthreads;="" data[i]..stop="(i+1)*tasksPerThread;" data[i].array="array;" data[numthreads-1].stop="ARRAYSIZE;" pthread_create(&thread[i],="" null,="" squarer,="" &data[i]);="" pthread_join(thread[i],="" null);="" i<arraysize;="" printf("%d="" ",="" array[i]);="" printf("\n");="" 0;="" <="" code=""></stop;></sys></unistd.h></sys></stdio.h></pthread.h>

Похожие вопросы