重複の可能性:
Linux上のC++動的共有ライブラリ
クラスと関数を持つlibtest.soという共有オブジェクトを書いています。libtest.soファイルにあるクラスとその関数を呼び出す「Program.cpp」という別のプログラムがあります。どうすればいいのかわからない。助けてください。
よろしくマヘシュありがとう
重複の可能性:
Linux上のC++動的共有ライブラリ
クラスと関数を持つlibtest.soという共有オブジェクトを書いています。libtest.soファイルにあるクラスとその関数を呼び出す「Program.cpp」という別のプログラムがあります。どうすればいいのかわからない。助けてください。
よろしくマヘシュありがとう
動的にdlsym
、関数のアドレスを取得するために呼び出してから、ポインターを介して呼び出す必要があります。dlsym
を返すため、この構文は少しトリッキーです。 と 関数へのポインタvoid*
の間の変換はありません。void*
(一部のコンパイラでは許可されていますが、正式には C++11 より前では、C 標準と同様に診断が必要でした。) Posix 標準で推奨されている解決策は次のとおりです。
int (*fptr)( int );
*(void**)(&fptr) = dlsym( handle, "function_name" );
これは、関数へのポインターがデータへのポインターと同じサイズと形式を持つことを前提としています。C または C++ 標準では保証されていませんが、Posix では保証されています。