Kompilacja kod pod GCC powoduje błąd - jak go naprawić?

0

Witam mam problem z kompilacją poniższego programu:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
#include <semaphore.h>
 
 
 
pthread_t pr[4];
pthread_mutex_t se[4];
pthread_mutex_t seEnd[4];
pthread_mutex_t seIndex;
 
int pIndex = 0;
int fIndex = 0;
int mIndex = 15;
 
int files[15] = {1,2,3,1,2,3,1,2,3,1,2,3,1,2,3};
int lockTimes[4] = {0,3,4,5};
int file;
 
int z = 0;
 
void * print(void *arg){
    pthread_mutex_lock(&seIndex);
    int i = pIndex++;
    pthread_mutex_unlock(&seIndex);
 
    printf("Start %d \n",i );
 
    while(fIndex<mIndex){
        pthread_mutex_lock(&se[i]);
 
        file = files[fIndex];
 
        pthread_mutex_lock(&seIndex);
 
        fIndex++;
        pthread_mutex_unlock(&seIndex);
 
        printf("=> Print %d file %d, time is: %ds.\n",i,file,lockTimes[file]*100 );
        int lockTime = z+lockTimes[file];
 
        while(z<lockTime);
        pthread_mutex_unlock(&se[i]);
    }
 
    pthread_mutex_unlock(&seEnd[i]);
}  // linia 50

 
int main(int argc, char const *argv[])
{
 
     pthread_mutex_lock(&seEnd[0]);
     pthread_mutex_lock(&seEnd[1]);
     pthread_mutex_lock(&seEnd[2]);
     pthread_mutex_lock(&seEnd[3]);
 
 
    pthread_create(&pr[0],NULL,print,NULL);
    pthread_create(&pr[1],NULL,print,NULL);
    pthread_create(&pr[2],NULL,print,NULL);
    pthread_create(&pr[3],NULL,print,NULL);
 
     while(z<1000)
     {
         printf("%d# \n",z);
 
      z++;  // 71 linia kodu
    }
 
 
 
    return 0;
} // 77 linia

Podczas kompilacji gcc -Wall drukarki2.c -o drukarki2 dostaję taki bład:

drukarki2.c: In function ‘print’:
drukarki2.c:53:5: warning: ‘main’ is normally a non-static function [-Wmain]
 int main(int argc, char const *argv[])
     ^
drukarki2.c:77:1: error: expected declaration or statement at end of input
 }
 ^
drukarki2.c:77:1: warning: control reaches end of non-void function [-Wreturn-type]
 } 
 ^

dodanie znacznika <code class="none"> - @furious programming

0

Dobrze byłoby jakbyś wstawił ten kod w <code class="cpp"></code> i pokazał która linia to 77.

0

Dodałem jedną spacje w lini 72 przy } i teraz mam taki o to błąd:

drukarki2.c: In function ‘print’:
drukarki2.c:50:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
/tmp/ccrnZ6P6.o: In function `main':
drukarki2.c:(.text+0x186): undefined reference to `pthread_create'
drukarki2.c:(.text+0x1aa): undefined reference to `pthread_create'
drukarki2.c:(.text+0x1ce): undefined reference to `pthread_create'
drukarki2.c:(.text+0x1f2): undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status

dodanie znacznika <code class="none"> - @furious programming

3

Dodaj

return NULL;

na końcu print, żeby się pozbyć warninga.

Kompiluj komendą

gcc -pthread -Wall drukarki2.c -o drukarki2
0

Działa wszystko wielkie dzięki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1