2012-01-13 17 views
0

Solarisで私はガイドラインに従ってexeファイルを持っています。機能を拡張するために共有ライブラリ(.so)を追加する必要があります。私はlthmyplugin.soファイルを作成し、説明に従って追加しました。今utttyは完全に正常に実行されるまで私の関数を呼び出す私の関数を呼び出した後、それは失敗します。EMFファイル(.so)デバッグ、シンボルが見つかりませんVTableエラー

質問:

  1. デバッグする方法はありますか?
  2. 私はlddは-d lthmyplugin.soまた

aa.soそれが識別コマンドトラスを実行

symbol not found: __1cIMyPluginG__vtbl_   (./lthmyplugin.so)  
    symbol not found: __1cIThPluginG__vtbl_   (./lthmyplugin.so)  
    symbol not found: __1cOThLocalOptionsG__vtbl_   (./lthmyplugin.so)  
    symbol not found: __1cJThOptionsG__vtbl_    (./lthmyplugin.so)  

以外はエラーを示さない、これはプログラムが失敗することができますか?

ちなみに、私が使用していないと、すべての仮想関数、コンストラクタやデストラクタ

これが見つからない記号が何を意味し:_ _vtbl_を1cIThPluginG?

おかげで、

+0

cppfilt' 'を通じて名前を実行してみてください。私はそのクラスのvtable(仮想関数ディスパッチテーブル)になります。 – Rup

+0

@Rup cppfiltは利用できません他のオプションはありません – AKS

+0

cppfiltではなくC++ filtでなければなりません。 – alanc

答えて

2

あなたはそうファイルによって公開された関数を参照するにはnmツールを使用することができます。電話をかけることができます:

nm -g lthmyplugin.so 

...どの機能が公開されているか確認してください。

これ以外にもC++とタグ付けされているので、私は刺すようにして質問します:Cスタイルの呼び出し規約を指定しましたか?もしあなたがそうしなければ、それは醜い、読めないようにする名前を絡み合い、99.9%のケースでは、無防備です。あなたはそうのように、__attribute __((CDECL))を追加して機能をマングルしないGCCを伝えることができます:

int not_mangled(int some_arg) __attribute__((cdecl)) 
{ 
    return some_arg * 3; 
} 
関連する問題