3

重複の可能性:
Linux上のC++動的共有ライブラリ

クラスと関数を持つlibtest.soという共有オブジェクトを書いています。libtest.soファイルにあるクラスとその関数を呼び出す「Program.cpp」という別のプログラムがあります。どうすればいいのかわからない。助けてください。

よろしくマヘシュありがとう

4

1 に答える 1

1

動的にdlsym、関数のアドレスを取得するために呼び出してから、ポインターを介して呼び出す必要があります。dlsymを返すため、この構文は少しトリッキーです。 と 関数へのポインタvoid*の間の変換はありません。void*(一部のコンパイラでは許可されていますが、正式には C++11 より前では、C 標準と同様に診断が必要でした。) Posix 標準で推奨されている解決策は次のとおりです。

int (*fptr)( int );
*(void**)(&fptr) = dlsym( handle, "function_name" );

これは、関数へのポインターがデータへのポインターと同じサイズと形式を持つことを前提としています。C または C++ 標準では保証されていませんが、Posix では保証されています。

于 2012-10-05T07:42:54.720 に答える