0

シミュレーションに取り込もうとしているサードパーティのライブラリがあります。静的ライブラリ (.a) と、そのすべてのランタイム依存関係 (共有オブジェクト) があります。ライブラリにリンクされた非常に単純なアプリケーション (C 言語) を作成しました。サードパーティ ライブラリの API の一部である初期化関数を呼び出して終了するだけです。これをコマンドラインから直接実行すると、正常に動作します。実行可能ファイルをコンドル グリッドに送信すると、strncpy (libc.so.6) でセグ フォールトが発生して失敗します。特定のマシンでのみ実行可能ファイルを実行するようにコンドルを強制しました。そのマシンで直接実行すると、問題なく動作します。

私は主に Java プログラマーです... ネイティブ コーディングの経験は限られています。私は、nm、ldd、catchsegv などのツールに精通しており、それらを実行できるようになっています。しかし、どこから問題を探し始めたらよいかわかりません。

ldd を実行中のマシンで直接実行し、condor から送信されたスクリプトを介して実行可能ファイルと共に実行しました。ldd は、どちらの場合も同じファイルを報告します。

直接実行する方法はわかりませんが、コンドルで実行すると失敗します。プログラムを最終的に実行するプロセス、condor_startd は、root として開始し、その有効な uid をサブミッターに変更するプロセスです。もしかしてこれが何か関係あるの?

4

1 に答える 1

0

これが問題を引き起こす理由はわかりませんが、原因はLANG環境変数でした。Condorで実行している場合は設定されませんでしたが、ローカルで実行している場合はUS_EN.UTF-8に設定されていました。この値をcondor実行環境に追加すると、問題が修正されました。

于 2011-04-20T17:34:10.440 に答える