2017-04-22 14 views
0

私は.soファイルを持っており、このメソッドをC++コードで使用する必要があります。ヘッダーファイルはありません。必要なシンボルをnm単位で逆コンパイルします。見つかったメソッドとクラスの情報は次のとおりです。ヘッダーファイルなしの.soファイルの使用

00000000002ec9c0 B CFTDOrderField::m_Describe 
0000000000067440 W CFTDOrderField::DescribeMembers() 

私の研究の後、ダイナミックローディングソリューションを使用する必要があると思います。しかし、私はどのようにdlsymの戻り値の型を定義するのか分からない、誰かが私にいくつかのヒントや解決策を与えることができますか?ありがとうございました!!

+0

'dlopen/dlsym'は '普通の'リンクよりも利点がありません。欠落しているヘッダーファイルの代わりに、再作成する必要はありません。容易ではありません。また、著作権法に違反する可能性もあります。 –

答えて

-1

これは簡単な作業ではありません。一般的には、dlsymはここでは使用できません。 Cとは異なり、C++ではシンボル名のマングリングが行われますが、マングリングの標準は実装ごとに異なります。同じコンパイラのバージョン間でも異なります。 Cの規則に従ってエクスポートされた関数を使用することはできますが、ヘッダーなしではすべての型(C++クラス)を使用することは不可能です。

クラスをエクスポートする共有オブジェクトの読み込みと使用は、C++では常に面倒です。 thisチュートリアルのような特別な関数を使うこともできますし、factoriesのようなより高度なテクニックを使うこともできます。最後に、コンパイラ/リンカ(これは一般的なコンパイラがこれをサポートしています)あなたのプログラムで使用する予定であり、この情報はコンパイル時に利用可能になるはずです。この情報はヘッダーファイルに含まれています。だから、あなたの質問に対する答えはむしろ否定的です。

名前のmanglingとなぜそれが "悪い"のコメントのリンクを参照してください。 (これはあまりにも文字通りではありません - これは技術的な理由がありますが、この機能は時々人生を難しくします:-))

+0

こんにちは、@rfx、私はあなたの言うことを理解していません。もっと詳しく説明できますか? – user2933783

+0

申し訳ありません。 http://www.geeksforgeeks.org/extern-c-in-c/これは、私が何を言っているのか、またC++で書かれた共有オブジェクトに 'dlopen'を使うのは難しいことを伝えてくれます。また、この記事の参考になるかもしれません。https://en.wikipedia.org/wiki/Name_mangling – rfx

関連する問題