C++ で記述されたさまざまなモジュールで構成されるアプリケーションがあります。
モジュールの 1 つは、SunGrid Engine で分散タスクを処理するためのものです。クライアントがグリッドをサポートしていない場合は、ローカル マシンを使用する必要が
あります API libdrmaa.so の共有オブジェクトは、コンパイル時にリンクされ、実行時にロードされます。
私のアプリケーションを使用しているクライアントがこの「.so」を持っている場合、すべて問題ありませんが、クライアントがそれを持っていない場合、アプリケーションは共有ライブラリのロードに失敗して終了します。
これを回避するために、API 呼び出しを dlsym() と dlopen() を使用して取得した関数ポインターに置き換えました。dlopen の呼び出しが成功せず、目的が達成された場合、グリッドの代わりにローカル マシンを使用できるようになりました。
現在の問題は、アプリケーションが小さなテストケースでは正常に実行されるようになったことですが、大きなテストケースではセグメンテーション エラーがスローされますが、動的読み込みを使用する同じコードは正しく機能します。
dlsym() と dlopen() を使用しているときに何か不足していますか?
同じ目標を達成する他の方法はありますか?
どんな助けでも大歓迎です。
ありがとう、