2016-08-31 9 views
2

私は.NETコアの目的はクロスプラットフォーム開発のためだと理解していますが、私は後方互換性を探しています。私は(おそらく、レガシー)利用可能なLinuxライブラリを持っていると私はその機能をLinuxプラットフォームの.NETコアアプリケーションから呼び出すようにします。出来ますか?.NETコアからlinuxプラットフォーム上の共有ライブラリ(.so)を呼び出すことは可能ですか?

私はASP.NETコアについては言及していません、私はデスクトップアプリケーションのためにそれが必要です。

+0

.NET Core自体は、Linux上でこのようなライブラリをたくさん使用しています。そこにPInvokeを作る方法を見るためにソースコードを確認できますか? –

+0

も参照:http://stackoverflow.com/questions/38202027/p-invoke-in-net-core-with-linux/38210267#38210267 –

答えて

0

はい:https://github.com/dotnet/corefx/issues/343

言われていること、私は実際にはまだそれを試してみましたがないに認めますよ。私はを持っています。これは単なる単価で、これは価値があります。そして、これについてのドキュメントを読む価値は間違いありません:http://www.mono-project.com/docs/advanced/pinvoke/ ... .netコアは同じアプローチを取っているようです(例:ファイル拡張子P-呼び出されたライブラリーのために、システムは)...右のバージョンなどへのリンクの世話をすることができるように

例:.NETコア自体のビットがこれを行う方法:

const string LIBC = "libc"; 

[DllImport(LIBC, EntryPoint = "getenv")] 
private static extern IntPtr getenv_core(string name); 

https://github.com/dotnet/corefx/blob/79d44f202e4b6d000ca6c6885a24549a55db38f1/src/System.Console/src/Interop/Interop.manual.Unix.cs

0

SWIGを見てください。これは、共有ライブラリをラップする簡単な方法であり、P/Invokeコードをすべて生成するだけでなく、.soライブラリとC#コードの間のヘッダファイル(think構造体)をマッピングします。 .soライブラリの周りに単純なcppラッパーを作成し、使用したいと思ってSWIGにその魔法をさせました。私たちは今、私たちのlinuxライブラリ関数を呼び出す.Netコード(単純なコンソールアプリケーション)から呼び出せるC#ライブラリを持っています。我々は、Ubuntu、CentOS、Debianを実行しているUNIXホスト上で、PIでこれを行っています。 http://www.swig.org/

関連する問題