What appears to be the problem is that though
typedef struct gqueue GQueue;
defines GQueue to be used instead of struct gqueue, that struct is itself not defined. Perhaps you need
#include "gqueue.h"
If the definition of the struct is not included, then you can not use sizeof(GQueue) because the size is not known to the compiler. However, the program can still compile and run with GQueue being opaque, so long as you use only the exported interface. It does appear you don't need to even create a GQueue with malloc; you can simply call create_gqueue.
qp = malloc(sizeof(GQueue)); // <---- not necessary
qp = create_gqueue(); // <---- all you need