Search code examples
data-distribution-serviceopendds

What library in OpenDDS contains "OpenDDS::DCPS::operator<<"?


I'm having an issue linking my shared library against an OpenDDS (v3.9) static library because I am unable to find where this method signature is located.

Here's the error.

[exec] libs/mylib/ABTypeSupportImpl.cpp:74: error: undefined reference to 'OpenDDS::DCPS::operator<<(OpenDDS::DCPS::Serializer&, short)'
[exec] collect2: error: ld returned 1 exit status
[exec] make: *** [/tmp/mybuild/lib_ab/obj/local/armeabi-v7a/lib_ab.so] Error 1

ABTypeSupportImpl.cpp is auto generated from compiling the IDL. More of the same errors follow. Because of the namespace (OpenDDS::DCPS), I would think this would be found within the library libOpenDDS_Dcps.a, but using nm on this lib and then grep'ing for "operator" or "<<", produces no results. Could it be that name mangling is a bit stranger for overloaded operators? I ran this on every library file within $DDS_ROOT/lib, but found nothing.

And if I recompile the IDL and remove member fields of structs with datatypes such as short or long, then there are no errors and everything links fine.

Anyone know what library this method signature might be located?


Solution

  • These operators are declared in 'dds/DCPS/Serializer.h' but implemented inline in Serializer.inl. Probably you compile OpenDDS with inlining enabled (its default) but when you compile your application you compile with inlining disabled.