Pthreads compile not working

╄→гoц情女王★ 提交于 2021-01-28 13:30:35

问题


I have written some code but it doesn't seem to work when I compile it. I am trying to run this in Ubuntu:

#include <pthread.h>
#include <ctype.h>
#include <unistd.h>

char buffer[128];

void *write_thread(void *args)
{
    int count = *((int*)args);
    write(STDOUT_FILENO, buffer, count);

    pthread_exit(0);
}

void *toupper_thread(void *args)
{
    int i;
    int count = *((int*)args);
    for(i = 0; i < count; i++) {
        buffer[i] = toupper(buffer[i]);
    }

    pthread_t writeId;
    pthread_create(&writeId, NULL, write_thread, &count);

    pthread_join(writeId, NULL);
    pthread_exit(0);
}

void *read_thread(void *args)
{
    int count = read(STDIN_FILENO, buffer, 128);
    pthread_t toupperId;
    pthread_create(&toupperId, NULL, toupper_thread, &count);

    pthread_join(toupperId, NULL);
    //buffer[count] = 0;

    pthread_exit(0);

}

int main()
{
    pthread_t threadId;
    pthread_create(&threadId, NULL, read_thread, NULL);

    pthread_join(threadId, NULL);
}

and I get these errors when I try to compile it with gcc -pthread prob41.c or with gcc prob41.c -lpthread:

   prob41.c:1:21: error: pthread.h: No such file or directory
   prob41.c: In function ‘toupper_thread’:
   prob41.c:23: error: ‘pthread_t’ undeclared (first use in this function)
   prob41.c:23: error: (Each undeclared identifier is reported only once
   prob41.c:23: error: for each function it appears in.)
   prob41.c:23: error: expected ‘;’ before ‘writeId’
   prob41.c:24: error: ‘writeId’ undeclared (first use in this function)
   prob41.c: In function ‘read_thread’:
   prob41.c:33: error: ‘pthread_t’ undeclared (first use in this function)
   prob41.c:33: error: expected ‘;’ before ‘toupperId’
   prob41.c:34: error: ‘toupperId’ undeclared (first use in this function)
   prob41.c: In function ‘main’:
   prob41.c:45: error: ‘pthread_t’ undeclared (first use in this function)
   prob41.c:45: error: expected ‘;’ before ‘threadId’
   prob41.c:46: error: ‘threadId’ undeclared (first use in this function)

I don't know what I'm doing wrong.


回答1:


It seems that you missed some dependencies.

Try this:

$ sudo apt-get install -y libc6-dev



回答2:


Need to add -I flag in the compile command to enable the compiler to find pthread.h




回答3:


  • You don't have a pthread.h library in the system. Try to install the suitable library for it.
  • You need to be sure to use #include <sys/type.h>
  • Don't forget to add the -lpthread while compiling: gcc -lpthread {x}.c -o {y}


来源:https://stackoverflow.com/questions/9168089/pthreads-compile-not-working

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!