Introduction
前々回は、GLibc内の関数をP/Invokeで呼び出してみました。
また、CMakeでビルドしたC++のライブラリで関数を公開してみました。
これを利用して、.NET CoreでビルドしたC#のアプリケーションから、自作のC++ライブラリの関数を呼びだしてみます。
Preparation
C#とC++の簡単なプロジェクトを用意します。
今回のサンプルは
になります。
サンプルは下記の構成になります。
- C++ 2つのint型の引数の和を返すAdd関数を備えたSharedライブラリ
- C# コマンドラインの2つの引数を整数に変換し、その引数をAdd関数に渡した結果を標準出力に表示する実行アプリ
C#
Program.cs
1 | using System; |
C++
libCppLib.cpp
1 |
|
CMakeLists.txt
1 | cmake_minimum_required(VERSION 3.0.0) |
Try
C++側は、Visual Studio Codeで、CMakeを使ってビルドします。
ビルド完了後、buildフォルダ配下に libCppLib.so が生成されます。
このファイルをシステムの共有フォルダに移動します。
FHS (Filesystem Hierarchy Standard) のルールに従って適切なフォルダにSharedライブラリをコピーします。
今回は、**/usr/local/lib64**にコピーします。
1 | file cp CppLib/build/libCppLib.so |
きちんと、Sharedライブラリがx64形式になっていることと、Add関数が公開されていることを確認し、フォルダにコピーしています。
C#側もビルドしますが、ビルド完了後、環境変数LD_LIBRARY_PATHに /usr/local/lib64 を追加します。
そうしないと、C#のアプリがライブラリを見つけることができません。
1 | cd CsharpApp |
期待通りの結果になりました。
環境変数LD_LIBRARY_PATHへの追加は一時的なものですので、別のシェルを立ち上げたりすると、そのシェルでは認識しないので、再度追加するか永続的に認識するよう別途対応しましょう。
Conclusion
自作ライブラリを使えるようになりました。
これによりLinuxでやれることが広がりました。
Source Code
https://github.com/takuya-takeuchi/Demo/tree/master/DotNetCoreLinux/DotNetCoreLinux6