0

このメソッド シグネチャの場所が見つからないため、共有ライブラリを 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 を使用し、"operator" または "<<" を grep しても結果は得られません。名前マングリングは、オーバーロードされた演算子にとって少し奇妙である可能性がありますか? $DDS_ROOT/lib 内のすべてのライブラリ ファイルでこれを実行しましたが、何も見つかりませんでした。

また、IDL を再コンパイルして、short や long などのデータ型を持つ構造体のメンバー フィールドを削除すると、エラーは発生せず、すべて正常にリンクされます。

このメソッド シグネチャがどのライブラリにあるか知っている人はいますか?

4

1 に答える 1

1

これらの演算子は「dds/DCPS/Serializer.h」で宣言されていますが、Serializer.inl でインラインで実装されています。おそらく、インライン化を有効にして (デフォルトで) OpenDDS をコンパイルしますが、アプリケーションをコンパイルするときは、インライン化を無効にしてコンパイルします。

于 2016-11-17T10:41:14.133 に答える