Allora sto provando a tirare giù qualcosa di banale, anche solo per creare una coda normale. Per ora ho creato questi file:

item.h

codice:
#include <stdio.h>

typedef char item;

random_queue.h

codice:
#include "item.h"

struct random_queue;
typedef struct random_queue *queue_random_queue;

queue_random_queue random_queue_make();
int random_queue_is_empty(queue_random_queue);
item random_queue_remove(queue_random_queue);
void random_queue_insert(queue_random_queue,item);
void random_queue_print(queue_random_queue);

random_queue.c

codice:
#include "random_queue.h"
#include <assert.h>
#include <stdio.h>

struct _node{
	item c;
	struct _node * next;
};

typedef struct _node * node;

struct random_queue{
	node first;
	node last;
};

queue_random_queue random_queue_make(){
	queue_random_queue new_queue = (queue_random_queue) malloc(sizeof(struct random_queue));
	assert(new_queue);
	new_queue->first = new_queue->last=(node) NULL;
	return new_queue;
}

int random_queue_is_empty(queue_random_queue q){
	assert(q);
	if(q->first == (node) NULL)
		return 1;
	else
		return 0;
}

void random_queue_insert(queue_random_queue q, item i){
	assert(q);
	{
		node new_node = (node) malloc(sizeof(struct _node));
		assert(new_node);
		new_node->c=i;
		if(random_queue_is_empty(q)==1){
			q->first=new_node;
			q->last=new_node;
		} else {
			q->last->next=new_node;
			q->last=new_node;
		}
	}
}

void random_queue_print(queue_random_queue q){
	node i=q->first;
	while(i->next != (node) NULL){
		printf("\n%c",i->c);
		i=i->next;
	}
}

item random_queue_remove(queue_random_queue q){}

testrq.c
codice:
#include "random_queue.h"
#include <stdio.h>

main(){
	queue_random_queue q;
	q=random_queue_make();
	return 0;
}

Ora il problema è che quando compilo con
$ gcc -o trq testrq.c
mi viene restituito il seguente errore: "undefined reference to 'random_queue_make'"

Vista la mia incapacità di fondo mi è anche venuto il dubbio che possa mancare qualche parametro da passare al compilatore, ma chiedo a voi se sbaglio qualcosa.

Grazie