2015-11-13 3 views
0

Я пытался узнать многопоточную программу в c и получил ошибку компоновщика, которую я не могу решить. Я проверил предыдущую проблему, подобную этой, но эти решения могли не решить мою проблему.ошибка компоновщика в c потоке программы .. ld возвращен 1 статус выхода

error : 
single_thread.c:(.text+0x15)undefined reference to 'thread_function' 
collect2:ld returned 1 exit status 

Я проверил опечатка в

программа идет как этот

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

    void *thread_functions(void *arg); 

    char message[]="Hello world"; 

    int main() 
    { 

     int res; 
     pthread_t a_thread; 
     void *thread_res; 

     res=pthread_create(&a_thread,NULL,thread_functions,(void*)message); 
//i guess error is from the function pointer. 
     if(res!=0) 
     { 
      perror("thread creation:"); 
      exit(EXIT_FAILURE); 
     } 

     printf("waiting for thread to finish...\n"); 
     pthread_join(a_thread,NULL); 
    /* if(res!=0) 
     { 
      perror("thread_join failed:"); 
      exit(EXIT_FAILURE); 
     }*/ 
    // printf("thread joined,it has returned %s\n",(char*)thread_res); 
     printf("Message:%s\n",message); 
     exit(EXIT_SUCCESS); 
    } 

    void *thread_fucntions(void *arg) 
    { 
     printf("thread function is running.argument was %s\n",(char*)arg); 
     sleep(3); 
     strcpy(message,"BYE!"); 
     pthread_exit("thank you for the cpu time"); 
    } 
+1

'я проверил опечатка в' ... как-то я сомневаюсь. :) –

+0

у меня есть. скомпилировал код с -lpthread. пожалуйста, помогите мне с формированием, чтобы задать вопрос. я не получаю его правильно – user3207191

+0

В этом коде есть тип, который, как мне кажется, является проблемой «void * thread_fucntions (void * arg)», неправильно написано в нижней части. – cedd

ответ

0

Вам нужно собрать как этот

gcc single.thread.c -lpthread 

Typo

void *thread_fucntions(void *arg) 
       ^^ 
+1

Я не думаю, что это проблема здесь, :) –

+0

@SouravGhosh, я вижу. :) – Haris

+0

Я сделал это .. пожалуйста, также помогите мне с формированием, чтобы задать вопрос. я не получаю это правильно – user3207191

1

Обязательно укажите функции точно так же, как и декларирование вперед и определение времени. Ваш компилятор видит прямое объявление функции thread_functions() и вызов к ней, но во время связывания линкер не получает определения того же самого, что и у вас там опечатка. Так он кричит.

Изменить

void *thread_fucntions(void *arg) 

в

void *thread_functions(void *arg) 
+0

, чем вы, сэр, я получил его .. не смог правильно это увидеть – user3207191

+0

@SergeyA Point !! Позвольте мне изменить, чтобы исправить это. –

Смежные вопросы