我在将共享库与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 1ABTypeSupportImpl.cpp是由编译IDL自动生成的。接下来会出现更多相同的错误。由于名称空间(OpenDDS::DCPS),我认为这可以在库libOpenDDS_Dcps.a中找到,但是在这个库中使用nm,然后grep‘’ing用于"operator“或"<<",就不会产生任何结果。对于超载的运营商来说,mangling这个名字是不是有点陌生呢?我在$DDS_ROOT/lib中的每个库文件上都运行了这个程序,但一无所获。
如果我重新编译IDL并删除带有数据类型(例如短或长)的structs的成员字段,那么就没有错误,所有的链接都很好。
有人知道这个方法签名可能位于哪个库吗?
发布于 2016-11-17 10:41:14
这些操作符在‘dds/DCPS/seerializer.h’中声明,但在Serializer.inl中内联实现。您可能会在启用内联(默认)的情况下编译OpenDDS,但在编译应用程序时,会禁用内联。
https://stackoverflow.com/questions/40645826
复制相似问题