Hello Peter,
I searched /usr/include and could not find anything with MQ_IO*, 
particularly not in mqueue.h. I don't have a linux available to compare.
I have progressed with the problem though, albeit using the 'throwing 
darts' technique of problem solving.

source: 
http://bogomips.org/ruby_posix_mq.git/tree/ext/posix_mq/posix_mq.c

In posix_mq.c there was only one reference to MQ_IO_NIL_P so I changed 
it:

if (mq->des != MQD_INVALID && MQ_IO_NIL_P(mq)) {
to
if (mq->des != MQD_INVALID && NIL_P(mq)) {

and that eliminated that problem, although I don't know what impact this 
will have at runtime. Seems to work.

The next problem was while testing the receive method.
I got the Unresolved symbol : rb_str_set_len
So I changed :
static void rb_18_str_set_len(VALUE str, long len)
to
static void rb_str_set_len(VALUE str, long len)

And so far it all seems to be working.
So I made 3 changes :
1) Commenting out the syntax error on the 'if' statement
2) Changing the reference to MQ_IO_NIL_P to NIL_P
3) Changing rb_18_str_set_len to rb_str_set_len

and still none the wiser about C programming !!

-- 
Posted via http://www.ruby-forum.com/.