Какая библиотека в OpenDDS содержит "OpenDDS::DCPS::operator<<"?
У меня проблема со связыванием моей общей библиотеки со статической библиотекой OpenDDS (v3.9), потому что я не могу найти, где находится подпись этого метода.
Вот ошибка.
[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 автоматически генерируется при компиляции IDL. Далее следуют те же ошибки. Из-за пространства имен (OpenDDS::DCPS), я думаю, это будет найдено в библиотеке libOpenDDS_Dcps.a, но использование nm в этой библиотеке и затем grep'ing для "operator" или "<<" не дает результатов. Может ли быть так, что искажение имен немного странно для перегруженных операторов? Я запускал это для каждого библиотечного файла в $ DDS_ROOT / lib, но ничего не нашел.
И если я перекомпилирую IDL и удаляю поля-члены структур с типами данных, такими как short или long, то ошибок не будет, и все будет нормально.
Кто-нибудь знает, в какой библиотеке может находиться эта сигнатура метода?
1 ответ
Эти операторы объявлены в 'dds/DCPS/Serializer.h', но встроены в Serializer.inl. Возможно, вы компилируете OpenDDS с включенным встраиванием (по умолчанию), но когда вы компилируете свое приложение, вы компилируете с отключенным встраиванием.