Какая библиотека в 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 с включенным встраиванием (по умолчанию), но когда вы компилируете свое приложение, вы компилируете с отключенным встраиванием.

Другие вопросы по тегам