2017-05-10 9 views
1

私はMonodevelopを使用していて、Cで書かれた共有オブジェクトファイルを呼び出すC#メインプログラムを持っています。このソリューションは正常にビルドされますが、実行しようとすると上記のSystem.DllNotfoundExceptionと致命的な未処理例外同じ共有オブジェクトファイルSystem.DllNotFoundException - SOファイルをインポートするにはどうすればいいですか?

私は、次のを見てきました

: - Calling UNIX and Linux \t shared object file \t .so from c# http://mono.1490590.n4.nabble.com/Adding-libraries-to-monodevelop-td1500573.html http://www.mono-project.com/docs/advanced/pinvoke/dllnotfoundexception/ http://www.mono-project.com/docs/advanced/pinvoke/

とSOここごとのファイルへのパスを設定します - 示し-vのldconfigの https://www.cyberciti.biz/faq/linux-setting-changing-library-path/

出力正しいフォルダーではなく、.SOファイルではありません。リンクの1つは、SOファイルの名前が何であるかは関係ありませんが、関連がある場合、私のものは「lib」で始まらないことを示唆しています。

このアプリケーションは以前から働いていましたが、買収したことで私はそれを解決しました。私はMonodevelopやLinuxプラットフォームのC#に精通していません。

プロジェクトは正常にビルドされますが、SOファイルが見つからないため実行されません。

また、SOファイルをMonodevelopのソリューションに組み込み、Build ActionオプションでEmbeddedResourceに設定しました。これが必要か正確かどうかは不明です。

C#コードは、呼び出し: -

[DllImport("xxxxxx.so")] 
protected static extern Int32 xxxxxx_init(); 

、すべてSOファイル同じに関するいくつかのさらなる呼び出しがあります。

すべてのヘルプは感謝していつものように受信:) J

UPDATE 6月12日: - をだから、私は、ログファイルを見て、問題の全体のヒープを持っていました。 .SOファイルが見つかりませんでしたので、LDCONFIGを関連するディレクトリに更新しました。 012SOAP.SOファイルの検索に役立ちました。元の.SOファイルが32ビットで作成され、Monodevelopのバージョンが64ビットであったため、ロードされませんでした。

MonodevelopでC#コードをコンパイルして32ビットの実行ファイルを作成する方法はありますか、または共有オブジェクトファイルを64ビットバージョンに再コンパイルする必要はありますか?

答えて

0

免責事項:私はMono(まったくのような)に慣れていません。

.so自体にいくつかの依存関係が存在するかどうかを確認したい場合があります。 hereから

(私はあなたがこのリンクを言及したことを見てきましたが、あなたは、ログレベルやチェックの依存性については何も言わなかった):

ネイティブの依存関係およびP /呼び出し

使用P/Invoke経由のネイティブライブラリ ライブラリが見つからない場合も同様のエラーが表示されることがあります。ネイティブライブラリ がロードされると、ネイティブライブラリは、それが依存する に他のライブラリをロードしようとする可能性があることに注意してください。どんな失敗も、元のネイティブの ライブラリがロードされていないことを示すだけで、 DllNotFoundExceptionになります。したがって、ライブラリが配置されている間に、 DllNotFoundExceptionが発生する可能性があります。この問題のトラブルシューティング

は、デバッグログレベルを設定して行うことができます。

$ MONO_LOG_LEVEL=debug mono YourApp.exe 
<snip> 
Mono-INFO: DllImport error loading library: 'Interop.so': '/usr/lib/Interop.so: undefined symbol: __some_function 
<snip> 
+0

私は1つがあった知らなかったが、興味深いことに、デバッグは、application.exe.soが見つからないことを知らせるれます。他にもSystem.Windows.Forms.dllのように見つからないということがたくさんありますが、これも.so(System.Windows.Forms.dll.so)として表示されていますが、参照ファイルの一部が表示されているようです正しく含まれていない。 – Jason

+0

@ Jason私は、リンクされたMonoのドキュメントにそれに関する段落があったと信じています。 '.so'を探すための標準的な場所を含まないことに関するもの。あるいは '.dll' <->' .so'マッピングが壊れています。申し訳ありませんが、私はどこにいても遊びません(私はLinuxもMonoも持っていません) –

+1

私は掘り出し物があり、設定が間違っているか間違っているかどうかを確認します。 – Jason

関連する問題