質問

私は、共有オブジェクトをロードしようとして、最初の行がdlopenの呼び出しであるテストに使用しているc ++コードをいくつか持っています。この行を押すと、次のエラーが表示されます。

Terminate called after throwing an instance of std::bad_alloc: 
   what() : St9bad_alloc

メモリをアップしました(free -mは、exeがgdbにロードされたときに〜120 MBの空きがあることを報告します)。それでも同じメッセージが表示されます。

これを引き起こしている可能性のあるアイデアについては誰でも&解決するために私にできることは何ですか?

役に立ちましたか?

解決

C ++ dlopen mini HOWTO をご覧ください。 p>

他のヒント

私の推測では、dlopenはそれとは何の関係もありません。 dlopen()はC言語関数であり、例外をスローすることはできません。実際にスローできるのは、共有オブジェクトの初期化関数、たとえば静的オブジェクトに割り当てる式です。たとえば、ロードしている共有オブジェクトにこれを書き込むと、bad_allocでクラッシュする可能性があります。

// dso.cpp start
#include <dso.h>

Object* instance = new Object();

// the rest of the file

しかし、dlopenのものはまったく無関係です、と思います。

おそらく、すべての依存関係を見つけることができないためです。

ディレクトリをアプリケーションが存在するディレクトリに変更します。
次に、ロードしようとしている共有ライブラリでnmを使用します(コードで使用したのと同じパス)。
これにより、不足している依存関係が表示されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top