It's me again
When i compile i get this undefined reference to semWait
I don't know if the problem is with my make file or code.
Compiler:
gcc -lpthread -o pctest pctest.o circbuffer.o
circbuffer.o: In function `get_buffer':
circbuffer.c.text+0xc0): undefined reference to `semWait'
Code:
all: hello sync sematest mutextest pctest
hello: hello.c
gcc -lpthread -o hello hello.c
sync: sync.c
gcc -lpthread -o sync sync.c
sematest: sematest.o sema.o
gcc -lpthread -o sematest sematest.o sema.o
sema.o: sema.c sema.h
gcc -Wall -c -o sema.o sema.c
sematest.o: sematest.c
gcc -Wall -c -o sematest.o sematest.c
mutextest: mutextest.c
gcc -lpthread -o mutextest mutextest.c
pctest: pctest.o circbuffer.o
gcc -lpthread -o pctest pctest.o circbuffer.o
pctest.o: pctest.c
gcc -Wall -c -o pctest.o pctest.c
circbuffer.o: circbuffer.c circbuffer.h
gcc -Wall -c -o circbuffer.o circbuffer.c
circbuffer.c
Code:
#include "circbuffer.h"
void init_buffer(bufferQueue *b, int min, int max)
{
b = malloc(sizeof(bufferQueue));
b->buffer_array = malloc(max*sizeof(int));
b->in = 0;
b->out = 0;
b->min_buffer_size = min;
b->max_buffer_size = max;
}
bufferQueue *destroy_buffer(bufferQueue *b)
{
free(b);
return b;
}
void put_buffer(bufferQueue *b, semaphore s, int v)
{
if((b->in+1)%b->max_buffer_size == b->out)
{
//semWait(&s);
}
b->buffer_array[b->in] = v;
b->in = (b->in+1)%b->max_buffer_size;
}
int get_buffer(bufferQueue *b, semaphore s)
{
if(b->in == b->out)
{
semWait(&s);
}
return b->buffer_array[b->out];
b->out = (b->out+1)%b->max_buffer_size;
}
circbuffer.h
Code:
#include "sema.h"
#include <stdlib.h>
typedef struct bufferQueue
{
int *buffer_array;
int min_buffer_size;
int max_buffer_size;
int in;
int out;
} bufferQueue;
void init_buffer(bufferQueue *b,int min, int max);
bufferQueue *destroy_buffer(bufferQueue *b);
void put_buffer(bufferQueue *b, semaphore s, int v);
int get_buffer(bufferQueue *b, semaphore s);