www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - msgpack unresolved question

reply "Dan" <dbdavidson yahoo.com> writes:
I got msgpack and was trying out an example (compare_json.d) and 
I get an unresolved error.
Not sure what I'm doing wrong...
https://github.com/msgpack/msgpack-d/blob/master/src/msgpack.d

I think length is built in for associative arrays?

Thanks
Dan

The error and lines of code is:
-----

/tmp/.rd.../objs/compare_json.o: In function `const( trusted void 
function(ref 
msgpack.Packer!(std.array.Appender!(ubyte[]).Appender).Packer)) 
msgpack.Value.toMsgpack!(msgpack.Packer!(std.array.Appender!(ubyte[]).Appender).Packer).toMsgpack':
/home/dbdavidson/stage/msgpack-d/src/msgpack.d:2967: undefined 
reference to ` property ulong 
object.AssociativeArray!(msgpack.Value, 
const(msgpack.Value)).AssociativeArray.length()'


         case Type.array:
             packer.beginArray(via.array.length);
             foreach (elem; via.array)
                 elem.toMsgpack(packer);
             break;
         case Type.map:
         packer.beginMap(via.map.length);
foreach (key, value; via.map) { key.toMsgpack(packer); value.toMsgpack(packer); } break; } -----
Oct 23 2012
parent reply "Dan" <dbdavidson yahoo.com> writes:
On Tuesday, 23 October 2012 at 13:40:00 UTC, Dan wrote:
 /tmp/.rd.../objs/compare_json.o: In function `const( trusted 
 void function(ref 
 msgpack.Packer!(std.array.Appender!(ubyte[]).Appender).Packer)) 
 msgpack.Value.toMsgpack!(msgpack.Packer!(std.array.Appender!(ubyte[]).Appender).Packer).toMsgpack':
 /home/dbdavidson/stage/msgpack-d/src/msgpack.d:2967: undefined 
 reference to ` property ulong 
 object.AssociativeArray!(msgpack.Value, 
 const(msgpack.Value)).AssociativeArray.length()'
No answer yet, but the errors look very similar to those run into here: http://www.digitalmars.com/d/archives/digitalmars/D/Something_wrong_with_dmd_s_-c_command_162601.html back in March. Wish I knew how that was resolved. When I tried to use msgpack my steps were: - git clone the msgpack project - edit my dmd.conf file and add a -I to the src folder of msgpack. - run rdmd on the .../example/compare_json.d Thanks Dan
Oct 24 2012
parent reply "Jesse Phillips" <Jessekphillips+D gmail.com> writes:
On Wednesday, 24 October 2012 at 11:19:08 UTC, Dan wrote:
 No answer yet, but the errors look very similar to those run 
 into here:

 http://www.digitalmars.com/d/archives/digitalmars/D/Something_wrong_with_dmd_s_-c_command_162601.html

 back in March. Wish I knew how that was resolved. When I tried 
 to use msgpack my steps were:

 - git clone the msgpack project
 - edit my dmd.conf file and add a -I to the src folder of 
 msgpack.
 - run rdmd on the .../example/compare_json.d

 Thanks
 Dan
It is a linker error. You need to compile the msgpack.d file and tell the linker where to find it. The simplest way is to just throw the file on the command line. dmd compare_json.d msgpack.d This kind of have some details about what you are doing:
Oct 25 2012
parent reply "Dan" <dbdavidson yahoo.com> writes:
On Thursday, 25 October 2012 at 17:59:40 UTC, Jesse Phillips 
wrote:
 It is a linker error. You need to compile the msgpack.d file 
 and tell the linker where to find it. The simplest way is to 
 just throw the file on the command line.

 dmd compare_json.d msgpack.d
Thanks. I tried your suggestion but had no luck (same link error). It could be my command is still wrong. Or maybe it is something related to associative arrays? The reason I suggest this is there is another example in the directory (custom.d) which uses functionality in msgpack and builds and runs fine without my specifying msgpack.d on the command line. Thanks Dan dmd /.../msgpack-d/example/compare_json.d /.../msgpack-d/src/msgpack.d compare_json.o: In function `_D7msgpack5Value83__T9toMsgpackTS7msgpack50__T6PackerTS3std5array16__T8AppenderTAhZ8AppenderZ6PackerZ9toMsgpackMxFNeKS7msgpack50__T6PackerTS3std5array16__T8AppenderTAhZ8AppenderZ6PackerZv': /.../msgpack-d/src/msgpack.d:(.text._D7msgpack5Value83__T9toMsgpackTS7msgpack50__T6PackerTS3std5array16__T8AppenderTAhZ8AppenderZ6PackerZ9toMsgpackMxFNeKS7msgpack50__T6PackerTS3std5array16__T8AppenderTAhZ8Append rZ6PackerZv+0x1aa): undefined reference to `_D6object55__T16AssociativeArrayTS7msgpack5ValueTxS7msgpack5ValueZ16AssociativeArray6lengthMFNdZm' collect2: ld returned 1 exit status --- errorlevel 1
Oct 25 2012
next sibling parent "Jesse Phillips" <Jessekphillips+D gmail.com> writes:
Hmm, I can reproduce. It is caused by the call to pack in 
function 2.

     void f2()
     {
         unpack(pack(mpObj));
     }

I get the feeling this may be a compiler bug, I'm not seeing 
anything used that isn't part of those two files or Phobos.
Oct 25 2012
prev sibling parent "Masahiro Nakagawa" <repeatedly gmail.com> writes:
Hi Dan,

Sorry for the delay.
Your mail is referred to as spam in Gmail...

I also got same error in compare_json.d,
and I agree with Jesse.

"pragma(msg, typeof(via.map.length));" returns 'ulong' during 
compilation.
But the linker error occurred in the runtime.

Now, I have no idea to resolve it in library.
Give me some time to think it over.


Thanks,
Masahiro

On Thursday, 25 October 2012 at 18:50:55 UTC, Dan wrote:
 On Thursday, 25 October 2012 at 17:59:40 UTC, Jesse Phillips 
 wrote:
 It is a linker error. You need to compile the msgpack.d file 
 and tell the linker where to find it. The simplest way is to 
 just throw the file on the command line.

 dmd compare_json.d msgpack.d
Thanks. I tried your suggestion but had no luck (same link error). It could be my command is still wrong. Or maybe it is something related to associative arrays? The reason I suggest this is there is another example in the directory (custom.d) which uses functionality in msgpack and builds and runs fine without my specifying msgpack.d on the command line. Thanks Dan dmd /.../msgpack-d/example/compare_json.d /.../msgpack-d/src/msgpack.d compare_json.o: In function `_D7msgpack5Value83__T9toMsgpackTS7msgpack50__T6PackerTS3std5array16__T8AppenderTAhZ8AppenderZ6PackerZ9toMsgpackMxFNeKS7msgpack50__T6PackerTS3std5array16__T8AppenderTAhZ8AppenderZ6PackerZv': /.../msgpack-d/src/msgpack.d:(.text._D7msgpack5Value83__T9toMsgpackTS7msgpack50__T6PackerTS3std5array16__T8AppenderTAhZ8AppenderZ6PackerZ9toMsgpackMxFNeKS7msgpack50__T6PackerTS3std5array16__T8AppenderTAhZ8Append rZ6PackerZv+0x1aa): undefined reference to `_D6object55__T16AssociativeArrayTS7msgpack5ValueTxS7msgpack5ValueZ16AssociativeArray6lengthMFNdZm' collect2: ld returned 1 exit status --- errorlevel 1
Nov 03 2012