共有ライブラリで使用する必要がある1つの基本クラスを持つメインプログラムを持っています。 基本クラスには、共有ライブラリの派生クラスを上書きする必要がある、純粋な仮想メソッドがあります。 メインプログラムは、dlopenシステムコールを使用して共有ライブラリをロードします。 dlopen( "共有ファイル名"、RTLD_NOW | RTLD_GLOBAL);共有ライブラリ内dlopenでダイナミックlibをロードするときに未定義のシンボルを投げる
基本クラス
class RateComputer
{
public:
RateComputer();
virtual ~RateComputer();
virtual void OnMarketData() = default;
private:
};
派生クラス。
class WeightedRateComputer : public RateComputer
{
public:
WeightedRateComputer();
~WeightedRateComputer();
void OnMarketData() override;
private:
};
とバイナリのコンパイルながら
を実装するので、私は-rdynamicフラグを追加したファイル。しかし、ライブラリをdlopenでロードすると、 "undefined symbol:_ZTI12RateComputer"というエラーが発生します。
int main()
{
void *handle = dlopen("../xx.so", RTLD_LAZY |RTLD_GLOBAL);
if (handle == NULL)
{
printf("%s\n", dlerror()); //throw error here
return 0;
}
return 0;
}
これらのメソッドはどこに実装されていますか? – VTT
それは重要ですか? – sundq
はい、実際は宣言よりも重要です。 – VTT